001 /* 002 * Licensed under the Apache License, Version 2.0 (the "License"); 003 * you may not use this file except in compliance with the License. 004 * You may obtain a copy of the License at 005 * 006 * http://www.apache.org/licenses/LICENSE-2.0 007 * 008 * Unless required by applicable law or agreed to in writing, software 009 * distributed under the License is distributed on an "AS IS" BASIS, 010 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 011 * See the License for the specific language governing permissions and 012 * limitations under the License. 013 */ 014 /* 015 * This file has been modified by Chris Pheby in accordance with Section 4.2 016 * of the Apache Software License 017 */ 018 package org.jadira.dependencynavigator; 019 020 import java.util.Properties; 021 022 import javax.swing.UIManager; 023 024 import org.codehaus.classworlds.ClassWorld; 025 import org.codehaus.plexus.embed.Embedder; 026 import org.jadira.dependencynavigator.config.Config; 027 import org.jadira.dependencynavigator.gui.DependencyBrowserGui; 028 import org.jadira.dependencynavigator.implementations.local.LocalDiskRepository; 029 import org.jadira.dependencynavigator.implementations.local.LocalDiskWorkspace; 030 import org.jadira.dependencynavigator.implementations.zip.ZipFileRepository; 031 import org.jadira.dependencynavigator.implementations.zip.ZipFileWorkspace; 032 033 public class DependencyNavigator { 034 035 private static final String KEY_TYPE = "type"; 036 public static final String TYPE_LOCAL = "local"; 037 private static final String TYPE_ZIP = "zip"; 038 039 /** 040 * @deprecated - use gui config org.jadira.dependencynavigator.config.Config instead 041 */ 042 private static final String ARG_REPOSITORY = "--repository="; 043 /** 044 * @deprecated - use gui config org.jadira.dependencynavigator.config.Config instead 045 */ 046 private static final String ARG_WORKSPACE = "--workspace="; 047 private static final String ARG_SNAPSHOT = "--snapshot="; 048 049 public static void main(String[] args) throws Exception { 050 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 051 052 // try to configure from the command line 053 Properties properties = configureFromCommandLine(args); 054 if (properties.get(KEY_TYPE) == null) { 055 // if no command line config present then use the configuration gui 056 Config configDialog = new Config(); 057 properties = configDialog.configure(); 058 properties.setProperty(KEY_TYPE, TYPE_LOCAL); 059 } 060 061 Embedder embedder = new Embedder(); 062 ClassWorld classWorld = new ClassWorld(); 063 classWorld.newRealm("plexus.core", Thread.currentThread().getContextClassLoader()); 064 embedder.setProperties(properties); 065 embedder.start(classWorld); 066 DependencyBrowserGui gui = (DependencyBrowserGui) embedder.lookup(DependencyBrowserGui.ROLE); 067 gui.open(); 068 embedder.stop(); 069 } 070 071 private static Properties configureFromCommandLine(String[] args) { 072 Properties properties = new Properties(); 073 for (String arg : args) { 074 if (arg.startsWith(ARG_REPOSITORY)) { 075 setRepositoryType(properties, TYPE_LOCAL); 076 properties.setProperty(LocalDiskRepository.KEY_LOCAL_REPO_PATH, arg.substring(ARG_REPOSITORY.length())); 077 } 078 if (arg.startsWith(ARG_WORKSPACE)) { 079 setRepositoryType(properties, TYPE_LOCAL); 080 properties.setProperty(LocalDiskWorkspace.KEY_WORKSPACE_PATH, arg.substring(ARG_WORKSPACE.length())); 081 } 082 if (arg.startsWith(ARG_SNAPSHOT)) { 083 setRepositoryType(properties, TYPE_ZIP); 084 properties.setProperty(ZipFileRepository.KEY_ZIPFILE_PATH, arg.substring(ARG_SNAPSHOT.length())); 085 properties.setProperty(ZipFileWorkspace.KEY_ZIPFILE_PATH, arg.substring(ARG_SNAPSHOT.length())); 086 } 087 } 088 return properties; 089 } 090 091 private static void setRepositoryType(Properties properties, String type) { 092 if (properties.get(KEY_TYPE) == null || properties.get(KEY_TYPE).equals(type)) { 093 properties.setProperty(KEY_TYPE, type); 094 } else { 095 throw new IllegalArgumentException("Cannot overwrite configuration type " + properties.get(KEY_TYPE) + " with type " + type); 096 } 097 } 098 }