| /* |
| * Copyright 2000-2011 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.android.converter; |
| |
| import com.intellij.conversion.CannotConvertException; |
| import com.intellij.conversion.ConversionProcessor; |
| import com.intellij.conversion.ModuleSettings; |
| import com.intellij.openapi.projectRoots.Sdk; |
| import com.intellij.openapi.projectRoots.SdkModificator; |
| import com.intellij.openapi.roots.OrderRootType; |
| import com.intellij.openapi.roots.impl.OrderEntryFactory; |
| import com.intellij.openapi.roots.libraries.Library; |
| import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import org.jdom.Element; |
| import org.jetbrains.android.sdk.AndroidPlatform; |
| import org.jetbrains.android.sdk.AndroidSdkType; |
| import org.jetbrains.android.sdk.AndroidSdkUtils; |
| import org.jetbrains.annotations.NotNull; |
| |
| /** |
| * @author Eugene.Kudelevsky |
| */ |
| public class AndroidModuleConverter1 extends ConversionProcessor<ModuleSettings> { |
| private static final String PLATFORM_NAME_ATTRIBUTE = "PLATFORM_NAME"; |
| |
| @Override |
| public boolean isConversionNeeded(ModuleSettings moduleSettings) { |
| Element confElement = AndroidConversionUtil.findAndroidFacetConfigurationElement(moduleSettings); |
| return confElement != null && AndroidConversionUtil.getOptionValue(confElement, PLATFORM_NAME_ATTRIBUTE) != null; |
| } |
| |
| @Override |
| public void process(ModuleSettings moduleSettings) throws CannotConvertException { |
| Element confElement = AndroidConversionUtil.findAndroidFacetConfigurationElement(moduleSettings); |
| assert confElement != null; |
| |
| Element platformNameElement = AndroidConversionUtil.getOptionElement(confElement, PLATFORM_NAME_ATTRIBUTE); |
| String platformName = platformNameElement != null ? platformNameElement.getAttributeValue(AndroidConversionUtil.OPTION_VALUE_ATTRIBUTE) : null; |
| |
| if (platformName == null) return; |
| |
| removeOldDependencies(moduleSettings, platformName); |
| confElement.removeContent(platformNameElement); |
| |
| Library androidLibrary = LibraryTablesRegistrar.getInstance().getLibraryTable().getLibraryByName(platformName); |
| if (androidLibrary != null) { |
| |
| AndroidPlatform androidPlatform = AndroidPlatform.parse(androidLibrary, null, null); |
| |
| if (androidPlatform != null) { |
| |
| Sdk androidSdk = AndroidSdkUtils.findAppropriateAndroidPlatform(androidPlatform.getTarget(), androidPlatform.getSdkData(), false); |
| |
| if (androidSdk == null) { |
| androidSdk = AndroidSdkUtils.createNewAndroidPlatform(androidPlatform.getTarget(), androidPlatform.getSdkData().getPath(), false); |
| |
| if (androidSdk != null) { |
| final SdkModificator modificator = androidSdk.getSdkModificator(); |
| |
| for (OrderRootType type : OrderRootType.getAllTypes()) { |
| for (VirtualFile root : androidLibrary.getFiles(type)) { |
| modificator.addRoot(root, type); |
| } |
| } |
| modificator.commitChanges(); |
| } |
| } |
| |
| if (androidSdk != null) { |
| addNewDependency(moduleSettings, androidSdk.getName()); |
| } |
| } |
| } |
| } |
| |
| private static void addNewDependency(ModuleSettings moduleSettings, @NotNull String jdkName) { |
| Element moduleManagerElement = moduleSettings.getComponentElement(ModuleSettings.MODULE_ROOT_MANAGER_COMPONENT); |
| if (moduleManagerElement != null) { |
| Element newEntryElement = new Element(OrderEntryFactory.ORDER_ENTRY_ELEMENT_NAME); |
| newEntryElement.setAttribute("type", "jdk"); |
| newEntryElement.setAttribute("jdkName", jdkName); |
| newEntryElement.setAttribute("jdkType", AndroidSdkType.SDK_NAME); |
| moduleManagerElement.addContent(newEntryElement); |
| } |
| } |
| |
| private static void removeOldDependencies(ModuleSettings moduleSettings, @NotNull String libName) { |
| Element moduleManagerElement = moduleSettings.getComponentElement(ModuleSettings.MODULE_ROOT_MANAGER_COMPONENT); |
| if (moduleManagerElement != null) { |
| for (Element entryElement : moduleManagerElement.getChildren(OrderEntryFactory.ORDER_ENTRY_ELEMENT_NAME)) { |
| |
| if (libName.equals(entryElement.getAttributeValue("name")) && |
| "library".equals(entryElement.getAttributeValue("type")) && |
| "application".equals(entryElement.getAttributeValue("level"))) { |
| moduleManagerElement.removeContent(entryElement); |
| } |
| |
| if ("jdk".equals(entryElement.getAttributeValue("type")) || "inheritedJdk".equals(entryElement.getAttributeValue("type"))) { |
| moduleManagerElement.removeContent(entryElement); |
| } |
| } |
| } |
| } |
| } |