/* * 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.android.maven; import com.intellij.openapi.components.*; import com.intellij.openapi.project.Project; import com.intellij.util.containers.HashMap; import com.intellij.util.xmlb.annotations.MapAnnotation; import com.intellij.util.xmlb.annotations.Tag; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.model.MavenArtifact; import org.jetbrains.idea.maven.model.MavenId; import java.util.Map; /** * @author Eugene.Kudelevsky */ @State( name = "AndroidExternalApklibDependenciesManager", storages = { @Storage(file = StoragePathMacros.WORKSPACE_FILE) } ) public class AndroidExternalApklibDependenciesManager implements PersistentStateComponent<AndroidExternalApklibDependenciesManager.State> { private State myState = new State(); public static AndroidExternalApklibDependenciesManager getInstance(@NotNull Project project) { return ServiceManager.getService(project, AndroidExternalApklibDependenciesManager.class); } @Override public AndroidExternalApklibDependenciesManager.State getState() { return myState; } @Override public void loadState(AndroidExternalApklibDependenciesManager.State state) { myState = state; } @Nullable public MavenArtifactResolvedInfo getResolvedInfoForArtifact(@NotNull MavenId mavenId) { final String key = AndroidMavenUtil.getMavenIdStringForFileName(mavenId); return myState.getResolvedInfoMap().get(key); } @Nullable public String getArtifactFilePath(@NotNull String mavenIdStr) { return myState.getArtifactFilesMap().get(mavenIdStr); } public void setResolvedInfoForArtifact(@NotNull MavenId mavenId, @NotNull MavenArtifactResolvedInfo info) { final String key = AndroidMavenUtil.getMavenIdStringForFileName(mavenId); myState.getResolvedInfoMap().put(key, info); } public void setArtifactFilePath(@NotNull MavenId mavenId, @NotNull String path) { final String key = AndroidMavenUtil.getMavenIdStringForFileName(mavenId); myState.getArtifactFilesMap().put(key, path); } public static class State { private Map<String, String> myArtifactFilesMap = new HashMap<String, String>(); private Map<String, MavenArtifactResolvedInfo> myResolvedInfoMap = new HashMap<String, MavenArtifactResolvedInfo>(); @Tag("resolved-infos") @MapAnnotation(surroundWithTag = false) public Map<String, MavenArtifactResolvedInfo> getResolvedInfoMap() { return myResolvedInfoMap; } @Tag("artifacts") @MapAnnotation(surroundWithTag = false) public Map<String, String> getArtifactFilesMap() { return myArtifactFilesMap; } public void setArtifactFilesMap(Map<String, String> artifactFilesMap) { myArtifactFilesMap = artifactFilesMap; } public void setResolvedInfoMap(Map<String, MavenArtifactResolvedInfo> artifactId2SdkData) { myResolvedInfoMap = artifactId2SdkData; } } public static class MavenDependencyInfo { private String myGroupId; private String myArtifactId; private String myVersion; private String myType; private String myScope; private String myPath; private String myLibName; public MavenDependencyInfo() { } @NotNull public static MavenDependencyInfo create(@NotNull MavenArtifact artifact) { final String path = artifact.getPathForExtraArtifact(null, null); final String libName = artifact.getLibraryName(); return new AndroidExternalApklibDependenciesManager.MavenDependencyInfo( artifact.getMavenId(), artifact.getType(), artifact.getScope(), path, libName); } private MavenDependencyInfo(@NotNull MavenId mavenId, @NotNull String type, @NotNull String scope, @NotNull String path, @NotNull String libName) { myGroupId = mavenId.getGroupId(); myArtifactId = mavenId.getArtifactId(); myVersion = mavenId.getVersion(); myType = type; myScope = scope; myPath = path; myLibName = libName; } public String getGroupId() { return myGroupId; } public String getArtifactId() { return myArtifactId; } public String getVersion() { return myVersion; } public String getType() { return myType; } public String getScope() { return myScope; } public String getPath() { return myPath; } public String getLibName() { return myLibName; } public void setGroupId(String groupId) { myGroupId = groupId; } public void setArtifactId(String artifactId) { myArtifactId = artifactId; } public void setVersion(String version) { myVersion = version; } public void setType(String type) { myType = type; } public void setScope(String scope) { myScope = scope; } public void setPath(String path) { myPath = path; } public void setLibName(String libName) { myLibName = libName; } } }