lang-api
[idea/community.git] / platform / lang-api / src / com / intellij / pom / event / PomModelEvent.java
1 /*
2  * Copyright 2000-2007 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.pom.event;
17
18 import com.intellij.pom.PomModel;
19 import com.intellij.pom.PomModelAspect;
20 import org.jetbrains.annotations.NotNull;
21 import org.jetbrains.annotations.Nullable;
22
23 import java.util.*;
24
25 public class PomModelEvent extends EventObject {
26   private Map<PomModelAspect, PomChangeSet> myChangeSets;
27
28   public PomModelEvent(PomModel source) {
29     super(source);
30   }
31
32   public Set<PomModelAspect> getChangedAspects() {
33     if (myChangeSets != null) {
34       return myChangeSets.keySet();
35     }
36     else {
37       return Collections.emptySet();
38     }
39   }
40
41   public void registerChangeSet(PomModelAspect aspect, PomChangeSet set) {
42     if (myChangeSets == null) {
43       myChangeSets = new HashMap<PomModelAspect, PomChangeSet>();
44     }
45     if (set != null) {
46       myChangeSets.put(aspect, set);
47     }
48     else {
49       myChangeSets.remove(aspect);
50     }
51   }
52
53   public <T extends PomChangeSet> T registerChangeSetIfAbsent(PomModelAspect aspect, @NotNull T set) {
54     final PomChangeSet oldSet = getChangeSet(aspect);
55     if (oldSet != null) return (T)oldSet;
56
57     registerChangeSet(aspect, set);
58     return set;
59   }
60
61
62   @Nullable
63   public PomChangeSet getChangeSet(PomModelAspect aspect) {
64     if (myChangeSets == null) return null;
65     return myChangeSets.get(aspect);
66   }
67
68   public void merge(final PomModelEvent event) {
69     if(event.myChangeSets == null) return;
70     if(myChangeSets == null){
71       myChangeSets = new HashMap<PomModelAspect, PomChangeSet>(event.myChangeSets);
72       return;
73     }
74     for (final Map.Entry<PomModelAspect, PomChangeSet> entry : event.myChangeSets.entrySet()) {
75       final PomModelAspect aspect = entry.getKey();
76       final PomChangeSet pomChangeSet = myChangeSets.get(aspect);
77       if (pomChangeSet != null) {
78         pomChangeSet.merge(entry.getValue());
79       }
80       else {
81         myChangeSets.put(aspect, entry.getValue());
82       }
83     }
84   }
85
86
87   public PomModel getSource() {
88     return (PomModel)super.getSource();
89   }
90 }