/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.aspose.words.maven.examples;
import com.aspose.words.maven.utils.AsposeConstants;
import com.aspose.words.maven.utils.AsposeMavenProjectManager;
import com.aspose.words.maven.utils.AsposeWordsJavaAPI;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.netbeans.api.project.Project;
import org.netbeans.spi.project.ui.templates.support.Templates;
import org.openide.WizardDescriptor;
import org.openide.util.Exceptions;
import org.openide.util.HelpCtx;
import org.w3c.dom.NodeList;
/**
* @author Adeel Ilyas
*/
public class AsposeExampleWizardPanel implements WizardDescriptor.Panel<WizardDescriptor> {
private AsposeExamplePanel component;
private static boolean storeSettingsCalled = false;
/**
*
* @return
*/
@Override
public AsposeExamplePanel getComponent() {
if (component == null) {
component = new AsposeExamplePanel(this);
}
return component;
}
/**
*
* @return
*/
@Override
public HelpCtx getHelp() {
return HelpCtx.DEFAULT_HELP;
}
/**
*
* @return
*/
@Override
public boolean isValid() {
// Enables Finish / OK /Next button
return component.validateDialog();
}
private final Set<ChangeListener> listeners = new HashSet<>(1); // or can use ChangeSupport in NB 6.0
/**
*
* @param l
*/
@Override
public void addChangeListener(ChangeListener l) {
synchronized (listeners) {
listeners.add(l);
}
}
/**
*
* @param l
*/
@Override
public void removeChangeListener(ChangeListener l) {
synchronized (listeners) {
listeners.remove(l);
}
}
/**
*
*/
protected final void fireChangeEvent() {
Iterator<ChangeListener> it;
synchronized (listeners) {
it = new HashSet<>(listeners).iterator();
}
ChangeEvent ev = new ChangeEvent(this);
while (it.hasNext()) {
it.next().stateChanged(ev);
}
}
/**
*
* @param wiz
*/
@Override
public void readSettings(WizardDescriptor wiz) {
Project selectedProject = Templates.getProject(wiz);
File projdir = new File(selectedProject.getProjectDirectory().getPath());
wiz.putProperty("projdir", projdir);
AsposeMavenProjectManager asposeMavenProjectManager = AsposeMavenProjectManager.initialize(wiz);
AsposeWordsJavaAPI.initialize(asposeMavenProjectManager);
component.read();
}
/**
*
* @param wiz
*/
@Override
public void storeSettings(WizardDescriptor wiz) {
boolean cancelled = wiz.getValue() != WizardDescriptor.FINISH_OPTION;
if (!cancelled) {
if (!storeSettingsCalled) {
storeSettingsCalled = true;
createExample();
} else {
storeSettingsCalled = false;
}
}
}
private boolean createExample() {
String projectPath = component.getSelectedProjectRootPath();
CustomMutableTreeNode comp = getSelectedNode();
if (comp == null || !comp.isFolder()) {
return false;
}
try {
String sourceRepositoryExamplePath = comp.getExPath();
if (sourceRepositoryExamplePath == null) {
return false;
}
String repositorylocation = AsposeWordsJavaAPI.getInstance().getLocalRepositoryPath();
String repositoryPOM_XML = repositorylocation + File.separator + "Examples" + File.separator + AsposeConstants.MAVEN_POM_XML;
NodeList examplesNoneAsposeDependencies = AsposeMavenProjectManager.getInstance().getDependenciesFromPOM(repositoryPOM_XML, AsposeConstants.ASPOSE_GROUP_ID);
AsposeMavenProjectManager.getInstance().addMavenDependenciesInProject(examplesNoneAsposeDependencies);
NodeList examplesNoneAsposeRepositories = AsposeMavenProjectManager.getInstance().getRepositoriesFromPOM(repositoryPOM_XML, AsposeConstants.ASPOSE_MAVEN_REPOSITORY);
AsposeMavenProjectManager.getInstance().addMavenRepositoriesInProject(examplesNoneAsposeRepositories);
String sourceExamplesUtilsPath = repositorylocation + File.separator + AsposeConstants.EXAMPLES_UTIL;
String destinationExamplesUtilsPath = projectPath + File.separator + sourceExamplesUtilsPath.replace(repositorylocation + File.separator + AsposeConstants.GITHUB_EXAMPLES_SOURCE_LOCATION, AsposeConstants.PROJECT_EXAMPLES_SOURCE_LOCATION);
String destinationExamplePath = projectPath + File.separator + sourceRepositoryExamplePath.replace(repositorylocation + File.separator + AsposeConstants.GITHUB_EXAMPLES_SOURCE_LOCATION, AsposeConstants.PROJECT_EXAMPLES_SOURCE_LOCATION);
String destinationResourcePath = projectPath + File.separator + sourceRepositoryExamplePath.replace(repositorylocation + File.separator + AsposeConstants.GITHUB_EXAMPLES_SOURCE_LOCATION, AsposeConstants.PROJECT_EXAMPLES_RESOURCES_LOCATION);
String sourceRepositoryExampleResourcesPath = sourceRepositoryExamplePath.replace(AsposeConstants.GITHUB_EXAMPLES_SOURCE_LOCATION, AsposeConstants.GITHUB_EXAMPLES_RESOURCES_LOCATION);
//Copying Example Category
copyExample(sourceRepositoryExamplePath, destinationExamplePath);
//Copying Example Resoureces
copyExample(sourceRepositoryExampleResourcesPath, destinationResourcePath);
//Copying Utils.java
AsposeMavenProjectManager.copyDirectory(new File(sourceExamplesUtilsPath + File.separator), new File(destinationExamplesUtilsPath + File.separator));
} catch (Exception ex) {
return false;
}
return true;
}
private CustomMutableTreeNode getSelectedNode() {
return (CustomMutableTreeNode) component.getExamplesTree().getLastSelectedPathComponent();
}
private void copyExample(String sourcePath, String destinationPath) {
try {
AsposeMavenProjectManager.copyDirectory(sourcePath, destinationPath);
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
}
}