Revision 43127

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/java/org/gvsig/symbology/app/symbolinstaller/execution/SymbolsInstallerInitializer.java
1
package org.gvsig.symbology.app.symbolinstaller.execution;
2

  
3
import java.io.File;
4
import org.apache.commons.io.FileUtils;
5
import org.gvsig.andami.PluginsLocator;
6
import org.gvsig.andami.PluginsManager;
7
import org.gvsig.installer.lib.api.InstallerLocator;
8
import org.gvsig.installer.lib.api.InstallerManager;
9
import org.gvsig.installer.lib.spi.InstallerProviderLocator;
10
import org.gvsig.tools.service.spi.ProviderManager;
11

  
12
import org.gvsig.tools.util.Invocable;
13
import org.slf4j.Logger;
14
import org.slf4j.LoggerFactory;
15

  
16
public class SymbolsInstallerInitializer implements Invocable {
17
    
18
    private static final Logger LOG = LoggerFactory.getLogger(SymbolsInstallerInitializer.class);
19

  
20
    @Override
21
    public Object call(Object... args) {
22
        PluginsManager pluginManager = PluginsLocator.getManager();
23
        File symbolsFolder = FileUtils.getFile(
24
                pluginManager.getApplicationHomeFolder(),
25
                "plugins",
26
                "org.gvsig.app.mainplugin",
27
                "Symbols"
28
        );
29
        this.perform((String) args[0], symbolsFolder);
30
        return true;
31
    }
32
    
33
    public void perform(String pluginName, File symbolsFolder) {
34
        try {
35
            InstallerManager installerManager = InstallerLocator.getInstallerManager();
36
            ProviderManager providerManager = InstallerProviderLocator.getProviderManager();
37

  
38
            SymbolInstallerExecutionProviderFactory factory = new SymbolInstallerExecutionProviderFactory(symbolsFolder);
39
            providerManager.addProviderFactory(factory);
40
            installerManager.setDefaultLocalAddonRepository(symbolsFolder, factory.getName());
41

  
42
        } catch (Exception ex) {
43
            LOG.warn("Problems initializing scripts installer.", ex);
44
        }
45
    }
46
}
trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.symbology.app/org.gvsig.symbology.app.symbolinstaller/src/main/resources-plugin/readme.txt
1

  
2
Este plugin registra el instalador de simbolos en el administrador de complementos.
3

  
4
Para que se preinstale de forma automatica el instalador de simbolos es preciso a?adir
5
al "packages.properties" del gvspks las siguientes entradas:
6

  
7
installers=symbols
8
installer.symbols.initializer=org.gvsig.symbology.app.symbolinstaller.execution.SymbolsInstallerInitializer
9
installer.symbols.package.code=org.gvsig.symbology.app.symbolinstaller
10
installer.symbols.factory.name=Symbols
11
installer.symbols.libs=lib
12

  
13
Si ya existe la entrada "installers", a?adir "symbols" al final separandolo con un 
14
espacio en blanco.
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.lib/org.gvsig.installer.lib.impl/src/main/java/org/gvsig/installer/lib/impl/execution/InstallerProviderInstallers.java
1
package org.gvsig.installer.lib.impl.execution;
2

  
3
import java.io.File;
4
import java.io.FilenameFilter;
5
import java.net.MalformedURLException;
6
import java.net.URL;
7
import java.net.URLClassLoader;
8
import java.util.Properties;
9
import org.apache.commons.io.FileUtils;
10
import org.gvsig.installer.lib.api.InstallerLocator;
11
import org.gvsig.installer.lib.api.InstallerManager;
12
import org.gvsig.installer.lib.api.PackageInfo;
13
import org.gvsig.installer.lib.api.execution.InstallPackageService;
14
import org.gvsig.installer.lib.spi.InstallerProviderLocator;
15
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
16
import org.gvsig.tools.service.spi.NotRegisteredException;
17
import org.gvsig.tools.service.spi.ParametersException;
18
import org.gvsig.tools.service.spi.ProviderManager_WithGetFactories;
19
import org.gvsig.tools.util.Invocable;
20
import org.slf4j.Logger;
21
import org.slf4j.LoggerFactory;
22

  
23
public class InstallerProviderInstallers {
24

  
25
    private static final Logger LOG = LoggerFactory.getLogger(InstallerProviderInstallers.class);
26

  
27
    private final InstallPackageService bundle;
28
    private final String installerName;
29
    private String packageCode;
30
    private String factoryName;
31
    private String initializerClassName;
32
    private String libs;
33
    private PackageInfo packageInfo = null;
34

  
35
    public InstallerProviderInstallers(InstallPackageService bundle, String installerName) {
36
        this.bundle = bundle;
37
        this.installerName = installerName;
38
        this.init();
39
    }
40
    
41
    private void init() {
42
        Properties props = this.bundle.getProperties();
43
        String s = "installer."+installerName;
44
        this.setInitializerClassName(props.getProperty(s+".initializer"));
45
        this.setPackageCode(props.getProperty(s+".package.code"));
46
        this.setFactoryName(props.getProperty(s+".factory.name"));
47
        this.setLibs(props.getProperty(s+".libs", "lib"));
48
    }
49

  
50
    /**
51
     * @return the bundle
52
     */
53
    public InstallPackageService getBundle() {
54
        return bundle;
55
    }
56

  
57
    /**
58
     * @return the packageCode
59
     */
60
    public String getPackageCode() {
61
        return packageCode;
62
    }
63

  
64
    /**
65
     * @param packageCode the packageCode to set
66
     */
67
    public void setPackageCode(String packageCode) {
68
        this.packageCode = packageCode;
69
    }
70

  
71
    /**
72
     * @return the initializerClassName
73
     */
74
    public String getInitializerClassName() {
75
        return initializerClassName;
76
    }
77

  
78
    /**
79
     * @param initializerClassName the initializerClassName to set
80
     */
81
    public void setInitializerClassName(String initializerClassName) {
82
        this.initializerClassName = initializerClassName;
83
    }
84

  
85
    /**
86
     * @return the libs
87
     */
88
    public String getLibs() {
89
        return libs;
90
    }
91

  
92
    /**
93
     * @param libs the libs to set
94
     */
95
    public void setLibs(String libs) {
96
        this.libs = libs;
97
    }
98

  
99
    /**
100
     * @return the factoryName
101
     */
102
    public String getFactoryName() {
103
        return factoryName;
104
    }
105

  
106
    /**
107
     * @param factoryName the factoryName to set
108
     */
109
    public void setFactoryName(String factoryName) {
110
        this.factoryName = factoryName;
111
    }
112
    
113
    private ClassLoader createClassLoader(File installFolder) {
114
        File folder = FileUtils.getFile(installFolder, this.packageCode,this.libs);
115
        File[] jars = folder.listFiles(new FilenameFilter() {
116

  
117
            @Override
118
            public boolean accept(File dir, String name) {
119
                if (name.endsWith(".jar")) {
120
                    return true;
121
                }
122
                return false;
123
            }
124
        });
125
        URL[] urls = new URL[jars.length];
126
        for (int i = 0; i < jars.length; i++) {
127
            File f = jars[i];
128
            try {
129
                urls[i] = f.toURI().toURL();
130
            } catch (MalformedURLException ex) {
131
                LOG.warn("Can't add jar '" + f.getAbsolutePath() + "' to class loader.", ex);
132
            }
133
        }
134
        URLClassLoader loader = new URLClassLoader(urls, this.getClass().getClassLoader());
135
        return loader;
136
    }
137

  
138
    private Object newInstance(ClassLoader loader, String className) {
139
        try {
140
            Class theClass = loader.loadClass(className);
141
            Object instance = theClass.newInstance();
142
            return instance;
143
        } catch (Exception ex) {
144
            LOG.warn("Can't create class '" + className + "'.", ex);
145
            return null;
146
        }
147
    }
148

  
149
    private PackageInfo getPackageInfo() {
150
        if (this.packageInfo == null) {
151
            this.packageInfo = this.bundle.getPackageInfo(packageCode);
152
        }
153
        return this.packageInfo;
154
    }
155

  
156
    public boolean isAlreadyRegistered() {
157
        try {
158
            ProviderManager_WithGetFactories providerManager = InstallerProviderLocator.getProviderManager();
159
            providerManager.getProviderFactory(factoryName);
160
            return true;
161
        } catch (NotRegisteredException ex) {
162
            return false;
163
        } catch (ParametersException ex) {
164
            throw new RuntimeException(ex);
165
        }
166
    }
167
    
168
    public void install() {
169
        InstallerManager installerManager = InstallerLocator.getInstallerManager();
170

  
171
        File installFolder = installerManager.getDefaultLocalAddonRepository(
172
                this.getPackageInfo().getType(),
173
                InstallerManager.ACCESS_WRITE
174
        );
175
        try {
176
            File f = FileUtils.getFile(installFolder,this.packageCode);
177
            if( ! f.exists() ) {
178
                this.bundle.installPackage(
179
                        installFolder,
180
                        this.packageCode
181
                );
182
            }
183
            if( ! isAlreadyRegistered() ) {
184
                ClassLoader loader = this.createClassLoader(installFolder);
185

  
186
                new DefaultLibrariesInitializer(loader).fullInitialize(true);
187

  
188
                Invocable initializer = (Invocable) this.newInstance(loader, initializerClassName);
189
                if (initializer == null) {
190
                    return;
191
                }
192
                initializer.call(this.packageCode);
193
            }
194
        } catch (Exception ex) {
195
            LOG.warn("Can't install package provider '" + this.packageCode + "' in the folder '" + installFolder == null ? "unknown" : installFolder.getAbsolutePath() + "'.", ex);
196
        }
197
    }
198
    
199
    class MyClassLoader extends URLClassLoader {
200

  
201
        public MyClassLoader(URL[] urls, ClassLoader parent) {
202
            super(urls, parent);
203
        }
204

  
205
        @Override
206
        protected Class<?> findClass(String name) throws ClassNotFoundException {
207
            LOG.info("findClass('"+name+"').");
208
            return super.findClass(name); 
209
        }
210

  
211
        @Override
212
        public Class<?> loadClass(String name) throws ClassNotFoundException {
213
            LOG.info("loadClass('"+name+"').");
214
            return super.loadClass(name); 
215
        }
216

  
217
        @Override
218
        protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
219
            LOG.info("loadClass('"+name+"',"+resolve+").");
220
            return super.loadClass(name, resolve); 
221
        }
222
        
223
    }
224

  
225
}
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.installer/org.gvsig.installer.swing/org.gvsig.installer.swing.impl/src/main/java/org/gvsig/installer/swing/impl/execution/panel/filters/AndFilter.java
1
package org.gvsig.installer.swing.impl.execution.panel.filters;
2

  
3
import org.gvsig.installer.swing.api.execution.PackageFilter;
4
import java.util.ArrayList;
5
import java.util.List;
6
import org.gvsig.installer.lib.api.PackageInfo;
7

  
8

  
9
public class AndFilter implements PackageFilter {
10
    private final List<PackageFilter> filters;
11

  
12
    public AndFilter() {
13
        this.filters = new ArrayList<>();
14
    }
15
    
16
    public AndFilter add(PackageFilter filter) {
17
        if( filter == null ) {
18
            return this;
19
        }
20
        this.filters.add(filter);
21
        return this;
22
    }
23

  
24
    @Override
25
    public boolean match(PackageInfo pkg) {
26
        for (PackageFilter filter : filters) {
27
            if( !filter.match(pkg) ) {
28
                return false;
29
            }
30
        }
31
        return true;
32
    }    
33
}

Also available in: Unified diff