/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.jme3.gde.obfuscate; import com.jme3.gde.core.j2seproject.ProjectExtensionManager; import com.jme3.gde.core.j2seproject.ProjectExtensionProperties; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.JComponent; import org.netbeans.api.project.Project; import org.netbeans.spi.project.ui.support.ProjectCustomizer; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * * @author normenhansen */ @ProjectCustomizer.CompositeCategoryProvider.Registration(projectType = "org-netbeans-modules-java-j2seproject", category = "BuildCategory", position = 510) public class ObfuscateCompositeProvider implements ProjectCustomizer.CompositeCategoryProvider { private static final String CAT_OBFUSCATION = "Obfuscation"; // NOI18N private static ProjectExtensionProperties jwsProps = null; private String[] keyList = new String[]{ "obfuscate", "obfuscate.options" }; private static String defaultOpts = "-keep public class * extends com.jme3.app.Application{public *;}\n" + "-keep public class * extends com.jme3.system.JmeSystemDelegate{public *;}\n" + "-keep public class * implements com.jme3.renderer.Renderer{public *;}\n" + "-keep public class * implements com.jme3.asset.AssetLoader{public *;}\n" + "-keep public class * implements com.jme3.asset.AssetLocator{public *;}\n" + "-keep public class * implements de.lessvoid.nifty.screen.ScreenController{public *;}\n" + "-dontwarn\n" + "-dontnote\n"; public ObfuscateCompositeProvider() { } @Override public ProjectCustomizer.Category createCategory(Lookup context) { return ProjectCustomizer.Category.create(CAT_OBFUSCATION, NbBundle.getMessage(ObfuscateCompositeProvider.class, "LBL_Category_Obfuscate"), null); } @Override public JComponent createComponent(ProjectCustomizer.Category category, Lookup context) { jwsProps = new ProjectExtensionProperties(context.lookup(Project.class), keyList); if(jwsProps.getProperty("obfuscate.options")==null){ jwsProps.setProperty("obfuscate.options", defaultOpts); } ObfuscateCustomizerPanel panel = new ObfuscateCustomizerPanel(jwsProps); category.setStoreListener(new SavePropsListener(jwsProps, context.lookup(Project.class))); category.setOkButtonListener(panel); return panel; } private class SavePropsListener implements ActionListener { private String extensionName = "obfuscate"; private String extensionVersion = "v0.11"; private String[] extensionDependencies = new String[]{"-post-jar", "-obfuscate"}; private ProjectExtensionManager manager = new ProjectExtensionManager(extensionName, extensionVersion, extensionDependencies); private ProjectExtensionProperties properties; private Project project; public SavePropsListener(ProjectExtensionProperties props, Project project) { this.properties = props; this.project = project; manager.setAntTaskLibrary("pro-guard"); } public void actionPerformed(ActionEvent e) { if ("true".equals(properties.getProperty("obfuscate"))) { manager.loadTargets("nbres:/com/jme3/gde/obfuscate/pro-guard-targets.xml"); manager.checkExtension(project); } else { manager.removeExtension(project); } try { properties.store(); } catch (IOException ioe) { Exceptions.printStackTrace(ioe); } } } }