copyright: update license
[fedora-idea.git] / plugins / Copyright / src / com / maddyhome / idea / copyright / options / Options.java
blobc5a9d0533c8cb06748f9760dca5cc7be11fce82c
1 /*
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;
29 import java.util.Map;
30 import java.util.TreeMap;
32 /**
34 public class Options implements JDOMExternalizable, Cloneable
36 public Options()
38 logger.info("Options()");
42 public LanguageOptions getOptions(String name)
44 String lang = FileTypeUtil.getInstance().getFileTypeNameByName(name);
45 LanguageOptions res = options.get(lang);
46 if (res == null)
48 res = LanguageOptionsFactory.createOptions(lang);
51 return res;
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);
70 @Nullable
71 public LanguageOptions getMergedOptions(String name)
73 try
75 LanguageOptions lang = getOptions(name).clone();
76 LanguageOptions temp = getTemplateOptions().clone();
77 switch (lang.getFileTypeOverride())
79 case LanguageOptions.USE_NONE:
80 return null;
81 case LanguageOptions.USE_TEMPLATE:
82 temp.setFileLocation(lang.getFileLocation());
83 temp.setFileTypeOverride(lang.getFileTypeOverride());
84 lang = temp;
85 break;
86 case LanguageOptions.USE_TEXT:
87 break;
90 return lang;
92 catch (CloneNotSupportedException e)
94 // This shouldn't happen
97 return null;
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);
118 else
120 Element root = null;
121 Element jOpts = element.getChild("JavaOptions");
122 if (jOpts != null) // version 2.1.x
124 root = jOpts;
126 else // versions 0.0.1 - 2.0.x
128 Element child = element.getChild("option");
129 if (child != null && child.getAttribute("name") != null)
131 root = element;
134 if (root != 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)
180 if (this == o)
182 return true;
184 if (o == null || getClass() != o.getClass())
186 return false;
189 final Options options1 = (Options)o;
191 return options.equals(options1.options);
194 public int hashCode()
196 int result;
197 result = options.hashCode();
198 return result;
201 public String toString()
203 final StringBuffer sb = new StringBuffer();
204 sb.append("Options");
205 sb.append("{options=").append(options);
206 sb.append('}');
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());
220 return res;
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());