Java tutorial
/* * Copyright (c) 2011-2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * 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.wso2.developerstudio.eclipse.artifact.template.wizards; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import javax.xml.namespace.QName; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.apache.commons.lang.StringUtils; import org.apache.maven.model.Plugin; import org.apache.maven.model.PluginExecution; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.xml.Xpp3Dom; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.MessageDialog; import org.wso2.developerstudio.eclipse.artifact.template.Activator; import org.wso2.developerstudio.eclipse.artifact.template.model.TemplateModel; import org.wso2.developerstudio.eclipse.artifact.template.utils.TemplateImageUtils; import org.wso2.developerstudio.eclipse.artifact.template.validators.HttpMethodList.HttpMethodType; import org.wso2.developerstudio.eclipse.esb.core.ESBMavenConstants; import org.wso2.developerstudio.eclipse.esb.project.artifact.ESBArtifact; import org.wso2.developerstudio.eclipse.esb.project.artifact.ESBProjectArtifact; import org.wso2.developerstudio.eclipse.gmf.esb.ArtifactType; import org.wso2.developerstudio.eclipse.logging.core.IDeveloperStudioLog; import org.wso2.developerstudio.eclipse.logging.core.Logger; import org.wso2.developerstudio.eclipse.maven.util.MavenUtils; import org.wso2.developerstudio.eclipse.platform.core.project.model.ProjectDataModel; import org.wso2.developerstudio.eclipse.platform.core.templates.ArtifactTemplate; import org.wso2.developerstudio.eclipse.platform.ui.editor.Openable; import org.wso2.developerstudio.eclipse.platform.ui.startup.ESBGraphicalEditor; import org.wso2.developerstudio.eclipse.platform.ui.wizard.AbstractWSO2ProjectCreationWizard; import org.wso2.developerstudio.eclipse.utils.file.FileUtils; public class TemplateProjectCreationWizard extends AbstractWSO2ProjectCreationWizard { private static IDeveloperStudioLog log = Logger.getLog(Activator.PLUGIN_ID); private static final String PROJECT_WIZARD_WINDOW_TITLE = "New Template Artifact"; private TemplateModel templateModel; private ESBProjectArtifact esbProjectArtifact; private List<File> fileLst = new ArrayList<File>(); private IProject project; private String version = "1.0.0"; public TemplateProjectCreationWizard() { this.templateModel = new TemplateModel(); super.setModel(this.templateModel); setWindowTitle(PROJECT_WIZARD_WINDOW_TITLE); setDefaultPageImageDescriptor(TemplateImageUtils.getInstance().getImageDescriptor("template.png")); } protected boolean isRequireProjectLocationSection() { return false; } public void setModel(ProjectDataModel model) { super.setModel(model); this.templateModel = (TemplateModel) model; } public boolean performFinish() { try { project = templateModel.getTemplateSaveLocation().getProject(); createSequenceArtifact(templateModel); if (fileLst.size() > 0) { openEditor(fileLst.get(0)); } } catch (Exception e) { log.error("An unexpected error has occurred", e); } return true; } private boolean createSequenceArtifact(TemplateModel sequenceModel) throws Exception { boolean isNewArtifact = true; IContainer location = project.getFolder( "src" + File.separator + "main" + File.separator + "synapse-config" + File.separator + "templates"); esbProjectArtifact = new ESBProjectArtifact(); esbProjectArtifact.fromFile(project.getFile("artifact.xml").getLocation().toFile()); File pomfile = project.getFile("pom.xml").getLocation().toFile(); getModel().getMavenInfo().setPackageName("synapse/template"); if (!pomfile.exists()) { createPOM(pomfile); } updatePom(); project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); String groupId = getMavenGroupId(pomfile); groupId += ".template"; if (getModel().getSelectedOption().equals("import.template")) { IFile sequence = location.getFile(new Path(getModel().getImportFile().getName())); if (sequence.exists()) { if (!MessageDialog.openQuestion(getShell(), "WARNING", "Do you like to override exsiting project in the workspace")) { return false; } isNewArtifact = false; } copyImportFile(location, isNewArtifact, groupId); } else { String templateContent = ""; String template = ""; ArtifactTemplate selectedTemplate = templateModel.getSelectedTemplate(); templateContent = FileUtils.getContentAsString(selectedTemplate.getTemplateDataStream()); if (selectedTemplate.getName().equals("Address Endpoint Template")) { template = createEPTemplate(templateContent, "Address Endpoint Template"); } else if (selectedTemplate.getName().equals("WSDL Endpoint Template")) { template = createEPTemplate(templateContent, "WSDL Endpoint Template"); } else if (selectedTemplate.getName().equals("Default Endpoint Template")) { template = createEPTemplate(templateContent, "Default Endpoint Template"); } else if (selectedTemplate.getName().equals("Sequence Template")) { template = createEPTemplate(templateContent, "Sequence Template"); } else if (selectedTemplate.getName().equals("HTTP Endpoint Template")) { template = createEPTemplate(templateContent, "HTTP Endpoint Template"); } else { template = createEPTemplate(templateContent, ""); } File destFile = new File(location.getLocation().toFile(), sequenceModel.getTemplateName() + ".xml"); FileUtils.createFile(destFile, template); fileLst.add(destFile); ESBArtifact artifact = new ESBArtifact(); artifact.setName(sequenceModel.getTemplateName()); artifact.setVersion(version); if ("Sequence Template".equals(selectedTemplate.getName())) { artifact.setType("synapse/sequenceTemplate"); } else { artifact.setType("synapse/endpointTemplate"); } artifact.setServerRole("EnterpriseServiceBus"); artifact.setGroupId(groupId); artifact.setFile( FileUtils .getRelativePath(project.getLocation().toFile(), new File(location.getLocation().toFile(), sequenceModel.getTemplateName() + ".xml")) .replaceAll(Pattern.quote(File.separator), "/")); esbProjectArtifact.addESBArtifact(artifact); } esbProjectArtifact.toFile(); project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); return true; } public String createEPTemplate(String templateContent, String type) throws IOException { String newContent = ""; if (type.equals("Sequence Template")) { newContent = MessageFormat.format(templateContent, templateModel.getTemplateName()); } else { templateContent = templateContent.replaceAll("\\{", "<"); templateContent = templateContent.replaceAll("\\}", ">"); newContent = StringUtils.replace(templateContent, "<ep.name>", templateModel.getTemplateName()); if (type.equals("Address Endpoint Template")) { newContent = StringUtils.replace(newContent, "<address.uri>", templateModel.getAddressEPURI()); } else if (type.equals("WSDL Endpoint Template")) { newContent = StringUtils.replace(newContent, "<wsdl.uri>", templateModel.getWsdlEPURI()); newContent = StringUtils.replace(newContent, "<service.name>", templateModel.getWsdlEPService()); newContent = StringUtils.replace(newContent, "<service.port>", templateModel.getWsdlEPPort()); } else if (type.equals("HTTP Endpoint Template")) { newContent = StringUtils.replace(newContent, "<http.uritemplate>", templateModel.getHttpUriTemplate()); if (!HttpMethodType.Leave_as_is.name().equals(templateModel.getHttpMethod().name())) { newContent = StringUtils.replace(newContent, "<http.method>", templateModel.getHttpMethod().name().toLowerCase()); } else { newContent = StringUtils.replace(newContent, "<http.method>", ""); } } } return newContent; } public void updatePom() throws IOException, XmlPullParserException { File mavenProjectPomLocation = project.getFile("pom.xml").getLocation().toFile(); MavenProject mavenProject = MavenUtils.getMavenProject(mavenProjectPomLocation); version = mavenProject.getVersion(); // Skip changing the pom file if group ID and artifact ID are matched if (MavenUtils.checkOldPluginEntry(mavenProject, "org.wso2.maven", "wso2-esb-template-plugin")) { return; } Plugin plugin = MavenUtils.createPluginEntry(mavenProject, "org.wso2.maven", "wso2-esb-template-plugin", ESBMavenConstants.WSO2_ESB_TEMPLATE_VERSION, true); PluginExecution pluginExecution = new PluginExecution(); pluginExecution.addGoal("pom-gen"); pluginExecution.setPhase("process-resources"); pluginExecution.setId("template"); Xpp3Dom configurationNode = MavenUtils.createMainConfigurationNode(); Xpp3Dom artifactLocationNode = MavenUtils.createXpp3Node(configurationNode, "artifactLocation"); artifactLocationNode.setValue("."); Xpp3Dom typeListNode = MavenUtils.createXpp3Node(configurationNode, "typeList"); typeListNode.setValue("${artifact.types}"); pluginExecution.setConfiguration(configurationNode); plugin.addExecution(pluginExecution); MavenUtils.saveMavenProject(mavenProject, mavenProjectPomLocation); } public void copyImportFile(IContainer importLocation, boolean isNewAritfact, String groupId) throws IOException { File importFile = getModel().getImportFile(); File destFile = null; List<OMElement> selectedSeqList = ((TemplateModel) getModel()).getSelectedTempSequenceList(); if (selectedSeqList != null && selectedSeqList.size() > 0) { for (OMElement element : selectedSeqList) { String name = element.getAttributeValue(new QName("name")); destFile = new File(importLocation.getLocation().toFile(), name + ".xml"); FileUtils.createFile(destFile, element.toString()); fileLst.add(destFile); if (isNewAritfact) { ESBArtifact artifact = new ESBArtifact(); artifact.setName(name); artifact.setVersion(version); artifact.setType("synapse/template"); artifact.setServerRole("EnterpriseServiceBus"); artifact.setGroupId(groupId); artifact.setFile(FileUtils .getRelativePath(importLocation.getProject().getLocation().toFile(), new File(importLocation.getLocation().toFile(), name + ".xml")) .replaceAll(Pattern.quote(File.separator), "/")); esbProjectArtifact.addESBArtifact(artifact); } } } else { destFile = new File(importLocation.getLocation().toFile(), importFile.getName()); FileUtils.copy(importFile, destFile); fileLst.add(destFile); String name = importFile.getName().replaceAll(".xml$", ""); if (isNewAritfact) { ESBArtifact artifact = new ESBArtifact(); artifact.setName(name); artifact.setVersion(version); artifact.setType("synapse/template"); artifact.setServerRole("EnterpriseServiceBus"); artifact.setGroupId(groupId); artifact.setFile(FileUtils .getRelativePath(importLocation.getProject().getLocation().toFile(), new File(importLocation.getLocation().toFile(), name + ".xml")) .replaceAll(Pattern.quote(File.separator), "/")); esbProjectArtifact.addESBArtifact(artifact); } } } protected boolean isRequiredWorkingSet() { return false; } public void openEditor(File file) { try { refreshDistProjects(); OMElement documentElement = new StAXOMBuilder(new FileInputStream(file)).getDocumentElement(); String templateType = ""; if (documentElement.getChildrenWithName(new QName("endpoint")) != null && documentElement.getChildrenWithName(new QName("endpoint")).hasNext()) { // Endpoint template. templateType = ArtifactType.TEMPLATE_ENDPOINT.getLiteral(); OMElement endpoint = (OMElement) documentElement.getChildrenWithName(new QName("endpoint")).next(); String localName = endpoint.getFirstElement().getLocalName(); if ("address".equals(localName)) { // Address endpoint template. templateType = ArtifactType.TEMPLATE_ENDPOINT_ADDRESS.getLiteral(); } else if ("wsdl".equals(localName)) { // WSDL endpoint template. templateType = ArtifactType.TEMPLATE_ENDPOINT_WSDL.getLiteral(); } else if ("http".equals(localName)) { // HTTP endpoint template. templateType = ArtifactType.TEMPLATE_ENDPOINT_HTTP.getLiteral(); } else { // Default endpoint template. templateType = ArtifactType.TEMPLATE_ENDPOINT_DEFAULT.getLiteral(); } } else { // Sequence template. templateType = ArtifactType.TEMPLATE_SEQUENCE.getLiteral(); } IFile dbsFile = ResourcesPlugin.getWorkspace().getRoot() .getFileForLocation(Path.fromOSString(file.getAbsolutePath())); String path = dbsFile.getParent().getFullPath() + "/"; String source = FileUtils.getContentAsString(file); Openable openable = ESBGraphicalEditor.getOpenable(); openable.editorOpen(file.getName(), templateType, path, source); } catch (Exception e) { log.error("Cannot open the editor", e); } } @Override public IResource getCreatedResource() { return null; } public void setProject(IProject project) { this.project = project; } }