2 * Copyright 2000-2007 JetBrains s.r.o.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com
.maddyhome
.idea
.copyright
.options
;
19 import com
.intellij
.openapi
.diagnostic
.Logger
;
20 import com
.intellij
.openapi
.fileTypes
.StdFileTypes
;
21 import com
.intellij
.openapi
.util
.InvalidDataException
;
22 import com
.intellij
.openapi
.util
.JDOMExternalizable
;
23 import com
.intellij
.openapi
.util
.WriteExternalException
;
24 import com
.maddyhome
.idea
.copyright
.util
.FileTypeUtil
;
25 import org
.jdom
.Element
;
26 import org
.jetbrains
.annotations
.Nullable
;
28 import java
.util
.List
;
30 import java
.util
.TreeMap
;
34 public class Options
implements JDOMExternalizable
, Cloneable
38 logger
.info("Options()");
42 public LanguageOptions
getOptions(String name
)
44 String lang
= FileTypeUtil
.getInstance().getFileTypeNameByName(name
);
45 LanguageOptions res
= options
.get(lang
);
48 res
= LanguageOptionsFactory
.createOptions(lang
);
54 public LanguageOptions
getTemplateOptions()
56 return getOptions(LANG_TEMPLATE
);
59 public void setOptions(String name
, LanguageOptions options
)
61 String lang
= FileTypeUtil
.getInstance().getFileTypeNameByName(name
);
62 this.options
.put(lang
, options
);
65 public void setTemplateOptions(LanguageOptions options
)
67 setOptions(LANG_TEMPLATE
, options
);
71 public LanguageOptions
getMergedOptions(String name
)
75 LanguageOptions lang
= getOptions(name
).clone();
76 LanguageOptions temp
= getTemplateOptions().clone();
77 switch (lang
.getFileTypeOverride())
79 case LanguageOptions
.USE_NONE
:
81 case LanguageOptions
.USE_TEMPLATE
:
82 temp
.setFileLocation(lang
.getFileLocation());
83 temp
.setFileTypeOverride(lang
.getFileTypeOverride());
86 case LanguageOptions
.USE_TEXT
:
92 catch (CloneNotSupportedException e
)
94 // This shouldn't happen
101 public void readExternal(Element element
) throws InvalidDataException
103 logger
.debug("readExternal()");
104 List langs
= element
.getChildren("LanguageOptions");
105 if (langs
!= null && langs
.size() > 0)
107 //noinspection ForLoopReplaceableByForEach
108 for (int i
= 0; i
< langs
.size(); i
++)
110 Element lang
= (Element
)langs
.get(i
);
111 String name
= lang
.getAttributeValue("name");
112 LanguageOptions opts
= LanguageOptionsFactory
.createOptions(name
);
113 opts
.readExternal(lang
);
115 setOptions(name
, opts
);
121 Element jOpts
= element
.getChild("JavaOptions");
122 if (jOpts
!= null) // version 2.1.x
126 else // versions 0.0.1 - 2.0.x
128 Element child
= element
.getChild("option");
129 if (child
!= null && child
.getAttribute("name") != null)
136 String lname
= StdFileTypes
.JAVA
.getName();
137 LanguageOptions opts
= LanguageOptionsFactory
.createOptions(lname
);
138 opts
.setFileTypeOverride(LanguageOptions
.USE_TEMPLATE
);
139 List children
= root
.getChildren("option");
140 for (Object option
: children
)
142 String name
= ((Element
)option
).getAttributeValue("name");
143 String val
= ((Element
)option
).getAttributeValue("value");
144 if ("body".equals(name
))
146 //todo opts.setNotice(val);
148 else if ("location".equals(name
))
150 opts
.setFileLocation(Integer
.parseInt(val
));
154 setOptions(lname
, opts
);
158 logger
.debug("options=" + this);
161 public void writeExternal(Element element
) throws WriteExternalException
163 logger
.debug("writeExternal()");
165 for (String lang
: options
.keySet())
167 LanguageOptions opts
= options
.get(lang
);
169 Element elem
= new Element("LanguageOptions");
170 elem
.setAttribute("name", lang
);
171 element
.addContent(elem
);
172 opts
.writeExternal(elem
);
175 logger
.debug("options=" + this);
178 public boolean equals(Object o
)
184 if (o
== null || getClass() != o
.getClass())
189 final Options options1
= (Options
)o
;
191 return options
.equals(options1
.options
);
194 public int hashCode()
197 result
= options
.hashCode();
201 public String
toString()
203 final StringBuffer sb
= new StringBuffer();
204 sb
.append("Options");
205 sb
.append("{options=").append(options
);
207 return sb
.toString();
210 public Options
clone() throws CloneNotSupportedException
212 Options res
= (Options
)super.clone();
213 res
.options
= new TreeMap
<String
, LanguageOptions
>();
214 for (String lang
: options
.keySet())
216 LanguageOptions opts
= options
.get(lang
);
217 res
.options
.put(lang
, opts
.clone());
223 private Map
<String
, LanguageOptions
> options
= new TreeMap
<String
, LanguageOptions
>();
224 private static final String LANG_TEMPLATE
= "__TEMPLATE__";
226 private static Logger logger
= Logger
.getInstance(Options
.class.getName());