| /* |
| * Copyright 2000-2009 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.idea.maven.project; |
| |
| import com.intellij.openapi.util.Comparing; |
| import com.intellij.openapi.util.text.StringUtil; |
| import com.intellij.openapi.vfs.LocalFileSystem; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import com.intellij.util.containers.ContainerUtil; |
| import com.intellij.util.xmlb.annotations.Property; |
| import com.intellij.util.xmlb.annotations.Transient; |
| import gnu.trove.THashSet; |
| import org.jdom.Element; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| import org.jetbrains.idea.maven.execution.MavenExecutionOptions; |
| import org.jetbrains.idea.maven.utils.MavenJDOMUtil; |
| import org.jetbrains.idea.maven.utils.MavenUtil; |
| |
| import java.io.File; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Set; |
| |
| public class MavenGeneralSettings implements Cloneable { |
| private boolean workOffline = false; |
| private String mavenHome = ""; |
| private String mavenSettingsFile = ""; |
| private String overriddenLocalRepository = ""; |
| private boolean printErrorStackTraces = false; |
| private boolean usePluginRegistry = false; |
| private boolean nonRecursive = false; |
| |
| private boolean alwaysUpdateSnapshots = false; |
| |
| private String threads; |
| |
| private MavenExecutionOptions.LoggingLevel outputLevel = MavenExecutionOptions.LoggingLevel.INFO; |
| private MavenExecutionOptions.ChecksumPolicy checksumPolicy = MavenExecutionOptions.ChecksumPolicy.NOT_SET; |
| private MavenExecutionOptions.FailureMode failureBehavior = MavenExecutionOptions.FailureMode.NOT_SET; |
| private MavenExecutionOptions.PluginUpdatePolicy pluginUpdatePolicy = MavenExecutionOptions.PluginUpdatePolicy.DEFAULT; |
| |
| private File myEffectiveLocalRepositoryCache; |
| private Set<String> myDefaultPluginsCache; |
| |
| private int myBulkUpdateLevel = 0; |
| private List<Listener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); |
| |
| public void beginUpdate() { |
| myBulkUpdateLevel++; |
| } |
| |
| public void endUpdate() { |
| if (--myBulkUpdateLevel == 0) { |
| changed(); |
| } |
| } |
| |
| public void changed() { |
| if (myBulkUpdateLevel > 0) return; |
| |
| myEffectiveLocalRepositoryCache = null; |
| myDefaultPluginsCache = null; |
| fireChanged(); |
| } |
| |
| @Property |
| @NotNull |
| public MavenExecutionOptions.PluginUpdatePolicy getPluginUpdatePolicy() { |
| return pluginUpdatePolicy; |
| } |
| |
| public void setPluginUpdatePolicy(MavenExecutionOptions.PluginUpdatePolicy value) { |
| if (value == null) return; // null may come from deserializator |
| this.pluginUpdatePolicy = value; |
| changed(); |
| } |
| |
| @Property |
| @NotNull |
| public MavenExecutionOptions.ChecksumPolicy getChecksumPolicy() { |
| return checksumPolicy; |
| } |
| |
| public void setChecksumPolicy(MavenExecutionOptions.ChecksumPolicy value) { |
| if (value == null) return; // null may come from deserializator |
| this.checksumPolicy = value; |
| changed(); |
| } |
| |
| @Property |
| @NotNull |
| public MavenExecutionOptions.FailureMode getFailureBehavior() { |
| return failureBehavior; |
| } |
| |
| public void setFailureBehavior(MavenExecutionOptions.FailureMode value) { |
| if (value == null) return; // null may come from deserializator |
| this.failureBehavior = value; |
| changed(); |
| } |
| |
| @Transient |
| @NotNull |
| @Deprecated // Use getOutputLevel() |
| public MavenExecutionOptions.LoggingLevel getLoggingLevel() { |
| return getOutputLevel(); |
| } |
| |
| @Property |
| @NotNull |
| public MavenExecutionOptions.LoggingLevel getOutputLevel() { |
| return outputLevel; |
| } |
| |
| public void setOutputLevel(MavenExecutionOptions.LoggingLevel value) { |
| if (value == null) return; // null may come from deserializator |
| this.outputLevel = value; |
| changed(); |
| } |
| |
| public boolean isWorkOffline() { |
| return workOffline; |
| } |
| |
| public void setWorkOffline(boolean workOffline) { |
| this.workOffline = workOffline; |
| changed(); |
| } |
| |
| @NotNull |
| public String getMavenHome() { |
| return mavenHome; |
| } |
| |
| public void setMavenHome(@NotNull final String mavenHome) { |
| if (!Comparing.equal(this.mavenHome, mavenHome)) { |
| this.mavenHome = mavenHome; |
| |
| myDefaultPluginsCache = null; |
| changed(); |
| } |
| } |
| |
| @Nullable |
| public File getEffectiveMavenHome() { |
| return MavenUtil.resolveMavenHomeDirectory(getMavenHome()); |
| } |
| |
| @NotNull |
| public String getUserSettingsFile() { |
| return mavenSettingsFile; |
| } |
| |
| public void setUserSettingsFile(@Nullable String mavenSettingsFile) { |
| if (mavenSettingsFile == null) return; |
| |
| if (!Comparing.equal(this.mavenSettingsFile, mavenSettingsFile)) { |
| this.mavenSettingsFile = mavenSettingsFile; |
| changed(); |
| } |
| } |
| |
| @Nullable |
| public File getEffectiveUserSettingsIoFile() { |
| return MavenUtil.resolveUserSettingsFile(getUserSettingsFile()); |
| } |
| |
| @Nullable |
| public File getEffectiveGlobalSettingsIoFile() { |
| return MavenUtil.resolveGlobalSettingsFile(getMavenHome()); |
| } |
| |
| @Nullable |
| public VirtualFile getEffectiveUserSettingsFile() { |
| File file = getEffectiveUserSettingsIoFile(); |
| return file == null ? null : LocalFileSystem.getInstance().findFileByIoFile(file); |
| } |
| |
| public List<VirtualFile> getEffectiveSettingsFiles() { |
| List<VirtualFile> result = new ArrayList<VirtualFile>(2); |
| VirtualFile file = getEffectiveUserSettingsFile(); |
| if (file != null) result.add(file); |
| file = getEffectiveGlobalSettingsFile(); |
| if (file != null) result.add(file); |
| return result; |
| } |
| |
| @Nullable |
| public VirtualFile getEffectiveGlobalSettingsFile() { |
| File file = getEffectiveGlobalSettingsIoFile(); |
| return file == null ? null : LocalFileSystem.getInstance().findFileByIoFile(file); |
| } |
| |
| @NotNull |
| public String getLocalRepository() { |
| return overriddenLocalRepository; |
| } |
| |
| public void setLocalRepository(final @Nullable String overridenLocalRepository) { |
| if (overridenLocalRepository == null) return; |
| |
| if (!Comparing.equal(this.overriddenLocalRepository, overridenLocalRepository)) { |
| this.overriddenLocalRepository = overridenLocalRepository; |
| changed(); |
| } |
| } |
| |
| public File getEffectiveLocalRepository() { |
| File result = myEffectiveLocalRepositoryCache; |
| if (result != null) return result; |
| |
| result = MavenUtil.resolveLocalRepository(overriddenLocalRepository, mavenHome, mavenSettingsFile); |
| myEffectiveLocalRepositoryCache = result; |
| return result; |
| } |
| |
| @NotNull |
| public VirtualFile getEffectiveSuperPom() { |
| return MavenUtil.resolveSuperPomFile(getEffectiveMavenHome()); |
| } |
| |
| public boolean isDefaultPlugin(String groupId, String artifactId) { |
| return getDefaultPlugins().contains(groupId + ":" + artifactId); |
| } |
| |
| private Set<String> getDefaultPlugins() { |
| Set<String> result = myDefaultPluginsCache; |
| if (result != null) return result; |
| |
| result = new THashSet<String>(); |
| |
| Element superProject = MavenJDOMUtil.read(getEffectiveSuperPom(), null); |
| for (Element each : MavenJDOMUtil.findChildrenByPath(superProject, "build.pluginManagement.plugins", "plugin")) { |
| String groupId = MavenJDOMUtil.findChildValueByPath(each, "groupId", "org.apache.maven.plugins"); |
| String artifactId = MavenJDOMUtil.findChildValueByPath(each, "artifactId", null); |
| result.add(groupId + ":" + artifactId); |
| } |
| |
| myDefaultPluginsCache = result; |
| return result; |
| } |
| |
| public boolean isPrintErrorStackTraces() { |
| return printErrorStackTraces; |
| } |
| |
| public void setPrintErrorStackTraces(boolean value) { |
| printErrorStackTraces = value; |
| changed(); |
| } |
| |
| public boolean isUsePluginRegistry() { |
| return usePluginRegistry; |
| } |
| |
| public void setUsePluginRegistry(final boolean usePluginRegistry) { |
| this.usePluginRegistry = usePluginRegistry; |
| changed(); |
| } |
| |
| public boolean isAlwaysUpdateSnapshots() { |
| return alwaysUpdateSnapshots; |
| } |
| |
| public void setAlwaysUpdateSnapshots(boolean alwaysUpdateSnapshots) { |
| this.alwaysUpdateSnapshots = alwaysUpdateSnapshots; |
| changed(); |
| } |
| |
| public boolean isNonRecursive() { |
| return nonRecursive; |
| } |
| |
| public void setNonRecursive(final boolean nonRecursive) { |
| this.nonRecursive = nonRecursive; |
| changed(); |
| } |
| |
| @Nullable |
| public String getThreads() { |
| return threads; |
| } |
| |
| public void setThreads(@Nullable String threads) { |
| this.threads = StringUtil.nullize(threads); |
| changed(); |
| } |
| |
| public boolean equals(final Object o) { |
| if (this == o) return true; |
| if (o == null || getClass() != o.getClass()) return false; |
| |
| final MavenGeneralSettings that = (MavenGeneralSettings)o; |
| |
| if (nonRecursive != that.nonRecursive) return false; |
| if (outputLevel != that.outputLevel) return false; |
| if (pluginUpdatePolicy != that.pluginUpdatePolicy) return false; |
| if (alwaysUpdateSnapshots != that.alwaysUpdateSnapshots) return false; |
| if (printErrorStackTraces != that.printErrorStackTraces) return false; |
| if (usePluginRegistry != that.usePluginRegistry) return false; |
| if (workOffline != that.workOffline) return false; |
| if (!checksumPolicy.equals(that.checksumPolicy)) return false; |
| if (!failureBehavior.equals(that.failureBehavior)) return false; |
| if (!overriddenLocalRepository.equals(that.overriddenLocalRepository)) return false; |
| if (!mavenHome.equals(that.mavenHome)) return false; |
| if (!mavenSettingsFile.equals(that.mavenSettingsFile)) return false; |
| if (!Comparing.equal(threads, that.threads)) return false; |
| |
| return true; |
| } |
| |
| public int hashCode() { |
| int result; |
| result = (workOffline ? 1 : 0); |
| result = 31 * result + mavenHome.hashCode(); |
| result = 31 * result + mavenSettingsFile.hashCode(); |
| result = 31 * result + overriddenLocalRepository.hashCode(); |
| result = 31 * result + (printErrorStackTraces ? 1 : 0); |
| result = 31 * result + (usePluginRegistry ? 1 : 0); |
| result = 31 * result + (nonRecursive ? 1 : 0); |
| result = 31 * result + outputLevel.hashCode(); |
| result = 31 * result + checksumPolicy.hashCode(); |
| result = 31 * result + failureBehavior.hashCode(); |
| result = 31 * result + pluginUpdatePolicy.hashCode(); |
| return result; |
| } |
| |
| @Override |
| public MavenGeneralSettings clone() { |
| try { |
| MavenGeneralSettings result = (MavenGeneralSettings)super.clone(); |
| result.myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); |
| result.myBulkUpdateLevel = 0; |
| return result; |
| } |
| catch (CloneNotSupportedException e) { |
| throw new Error(e); |
| } |
| } |
| |
| public void addListener(Listener l) { |
| myListeners.add(l); |
| } |
| |
| public void removeListener(Listener l) { |
| myListeners.remove(l); |
| } |
| |
| private void fireChanged() { |
| for (Listener each : myListeners) { |
| each.changed(); |
| } |
| } |
| |
| public interface Listener { |
| void changed(); |
| } |
| } |