Merge branch 'db/javac-ast'
[idea/community.git] / platform / analysis-impl / src / com / intellij / profile / ProfileEx.java
1 /*
2  * Copyright 2000-2016 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.profile;
17
18 import com.intellij.profile.codeInspection.ProjectInspectionProfileManagerKt;
19 import com.intellij.util.xmlb.SmartSerializer;
20 import com.intellij.util.xmlb.annotations.OptionTag;
21 import com.intellij.util.xmlb.annotations.Transient;
22 import org.jdom.Element;
23 import org.jetbrains.annotations.NotNull;
24
25 /**
26  * User: anna
27  * Date: 01-Dec-2005
28  */
29 public abstract class ProfileEx implements Profile {
30   public static final String SCOPE = "scope";
31   public static final String NAME = "name";
32
33   private final SmartSerializer mySerializer;
34
35   @NotNull
36   protected String myName;
37
38   protected ProfileManager myProfileManager;
39
40   private boolean myIsProjectLevel;
41
42   public ProfileEx(@NotNull String name) {
43     this(name, SmartSerializer.skipEmptySerializer());
44   }
45
46   protected ProfileEx(@NotNull String name, @NotNull SmartSerializer serializer) {
47     myName = name;
48     mySerializer = serializer;
49   }
50
51   @Override
52   @NotNull
53   // ugly name to preserve compatibility
54   @OptionTag("myName")
55   public String getName() {
56     return myName;
57   }
58
59   @Override
60   @Transient
61   public boolean isProjectLevel() {
62     return myIsProjectLevel;
63   }
64
65   @Override
66   public void setProjectLevel(boolean isProjectLevel) {
67     myIsProjectLevel = isProjectLevel;
68   }
69
70   @Override
71   public void setName(@NotNull String name) {
72     myName = name;
73   }
74
75   @Override
76   @NotNull
77   @Transient
78   public ProfileManager getProfileManager() {
79     return myProfileManager;
80   }
81
82   @Override
83   public void setProfileManager(@NotNull ProfileManager profileManager) {
84     myProfileManager = profileManager;
85   }
86
87   @Override
88   public void readExternal(Element element) {
89     mySerializer.readExternal(this, element);
90   }
91
92   public void serializeInto(@NotNull Element element, boolean preserveCompatibility) {
93     mySerializer.writeExternal(this, element, preserveCompatibility);
94   }
95
96   @Override
97   public final void writeExternal(Element element) {
98     serializeInto(element, true);
99   }
100
101   public boolean equals(Object o) {
102     return this == o || o instanceof ProfileEx && myName.equals(((ProfileEx)o).myName);
103   }
104
105   public int hashCode() {
106     return myName.hashCode();
107   }
108
109   @Override
110   public int compareTo(@NotNull Object o) {
111     if (o instanceof Profile) {
112       return getName().compareToIgnoreCase(((Profile)o).getName());
113     }
114     return 0;
115   }
116
117   @Override
118   public final void copyFrom(@NotNull Profile profile) {
119     readExternal(serializeProfile(profile));
120   }
121
122   @NotNull
123   public static Element serializeProfile(@NotNull Profile profile) {
124     Element result = new Element(ProjectInspectionProfileManagerKt.PROFILE);
125     profile.writeExternal(result);
126     return result;
127   }
128 }