| /* |
| * Copyright 2000-2012 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.jetbrains.jps.devkit.model.impl; |
| |
| import com.intellij.openapi.util.JDOMExternalizerUtil; |
| import org.jdom.Element; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| import org.jetbrains.jps.devkit.model.JpsIdeaSdkProperties; |
| import org.jetbrains.jps.devkit.model.JpsIdeaSdkType; |
| import org.jetbrains.jps.devkit.model.JpsPluginModuleProperties; |
| import org.jetbrains.jps.devkit.model.JpsPluginModuleType; |
| import org.jetbrains.jps.model.JpsElementFactory; |
| import org.jetbrains.jps.model.JpsSimpleElement; |
| import org.jetbrains.jps.model.serialization.*; |
| import org.jetbrains.jps.model.serialization.module.JpsModulePropertiesSerializer; |
| import org.jetbrains.jps.model.serialization.library.JpsSdkPropertiesSerializer; |
| |
| import java.util.Arrays; |
| import java.util.List; |
| |
| /** |
| * @author nik |
| */ |
| public class JpsDevKitModelSerializerExtension extends JpsModelSerializerExtension { |
| @NotNull |
| @Override |
| public List<? extends JpsModulePropertiesSerializer<?>> getModulePropertiesSerializers() { |
| return Arrays.asList(new JpsPluginModulePropertiesSerializer()); |
| } |
| |
| @NotNull |
| @Override |
| public List<? extends JpsSdkPropertiesSerializer<?>> getSdkPropertiesSerializers() { |
| return Arrays.asList(new JpsIdeaSdkPropertiesSerializer()); |
| } |
| |
| private static class JpsIdeaSdkPropertiesSerializer extends JpsSdkPropertiesSerializer<JpsSimpleElement<JpsIdeaSdkProperties>> { |
| private static final String SANDBOX_HOME_FIELD = "mySandboxHome"; |
| private static final String JDK_NAME_ATTRIBUTE = "sdk"; |
| |
| public JpsIdeaSdkPropertiesSerializer() { |
| super("IDEA JDK", JpsIdeaSdkType.INSTANCE); |
| } |
| |
| @NotNull |
| @Override |
| public JpsSimpleElement<JpsIdeaSdkProperties> loadProperties(@Nullable Element propertiesElement) { |
| String sandboxHome = null; |
| String jdkName = null; |
| if (propertiesElement != null) { |
| sandboxHome = JDOMExternalizerUtil.readField(propertiesElement, SANDBOX_HOME_FIELD); |
| jdkName = propertiesElement.getAttributeValue(JDK_NAME_ATTRIBUTE); |
| } |
| return JpsElementFactory.getInstance().createSimpleElement(new JpsIdeaSdkProperties(sandboxHome, jdkName)); |
| } |
| |
| @Override |
| public void saveProperties(@NotNull JpsSimpleElement<JpsIdeaSdkProperties> properties, @NotNull Element element) { |
| JDOMExternalizerUtil.writeField(element, SANDBOX_HOME_FIELD, properties.getData().getSandboxHome()); |
| element.setAttribute(JDK_NAME_ATTRIBUTE, properties.getData().getJdkName()); |
| } |
| } |
| |
| private static class JpsPluginModulePropertiesSerializer extends JpsModulePropertiesSerializer<JpsSimpleElement<JpsPluginModuleProperties>> { |
| private static final String URL_ATTRIBUTE = "url"; |
| private static final String MANIFEST_ATTRIBUTE = "manifest"; |
| |
| private JpsPluginModulePropertiesSerializer() { |
| super(JpsPluginModuleType.INSTANCE, "PLUGIN_MODULE", "DevKit.ModuleBuildProperties"); |
| } |
| |
| @Override |
| public JpsSimpleElement<JpsPluginModuleProperties> loadProperties(@Nullable Element componentElement) { |
| String pluginXmlUrl = componentElement != null ? componentElement.getAttributeValue(URL_ATTRIBUTE) : null; |
| String manifestFileUrl = componentElement != null ? componentElement.getAttributeValue(MANIFEST_ATTRIBUTE) : null; |
| return JpsElementFactory.getInstance().createSimpleElement(new JpsPluginModuleProperties(pluginXmlUrl, manifestFileUrl)); |
| } |
| |
| @Override |
| public void saveProperties(@NotNull JpsSimpleElement<JpsPluginModuleProperties> element, @NotNull Element componentElement) { |
| String pluginXmlUrl = element.getData().getPluginXmlUrl(); |
| if (pluginXmlUrl != null) { |
| componentElement.setAttribute(URL_ATTRIBUTE, pluginXmlUrl); |
| } |
| String manifestFileUrl = element.getData().getManifestFileUrl(); |
| if (manifestFileUrl != null) { |
| componentElement.setAttribute(MANIFEST_ATTRIBUTE, manifestFileUrl); |
| } |
| } |
| } |
| } |
| |