From 04402347917a82bf5c0a00a44c5db3710b68ae4d Mon Sep 17 00:00:00 2001 From: ali_salman Date: Tue, 8 Mar 2016 10:41:25 +0500 Subject: [PATCH 1/2] Aspose-Cells-Java-for-Eclipse(Maven) --- .../AsposeCellsEclipseFeature/.project | 17 + .../build.properties | 1 + .../AsposeCellsEclipseFeature/feature.xml | 52 ++ .../AsposeCellsEclipsePlugin/.classpath | 7 + .../AsposeCellsEclipsePlugin/.project | 28 + .../.settings/org.eclipse.jdt.core.prefs | 7 + .../AsposeCellsEclipsePlugin/build.properties | 7 + .../AsposeCellsEclipsePlugin/plugin.xml | 24 + .../resources/Aspose.png | Bin 0 -> 851 bytes .../resources/classpath-template.txt | 31 ++ .../resources/long_banner.png | Bin 0 -> 64954 bytes .../resources/org-eclipse-jdt-core.txt | 5 + .../resources/pom-xml-template.txt | 20 + .../src/com/aspose/cells/Activator.java | 80 +++ .../src/com/aspose/cells/MavenSettings.java | 85 +++ .../maven/AsposeMavenProjectSupport.java | 158 ++++++ .../cells/maven/AsposeMavenProjectWizard.java | 54 ++ .../maven/AsposeMavenProjectWizardPage.java | 370 +++++++++++++ .../cells/maven/artifacts/Metadata.java | 362 +++++++++++++ .../cells/maven/artifacts/ObjectFactory.java | 55 ++ .../cells/maven/artifacts/maven-metada.xml | 17 + .../cells/maven/artifacts/maven-metadata.xsd | 30 ++ .../maven/examples/AsposeExampleSupport.java | 96 ++++ .../maven/examples/AsposeExampleWizard.java | 61 +++ .../examples/AsposeExampleWizardPage.java | 307 +++++++++++ .../cells/maven/utils/AsposeCellsJavaAPI.java | 78 +++ .../cells/maven/utils/AsposeConstants.java | 146 +++++ .../cells/maven/utils/AsposeJavaAPI.java | 159 ++++++ .../utils/AsposeMavenProjectManager.java | 499 ++++++++++++++++++ .../cells/maven/utils/FormatExamples.java | 30 ++ .../aspose/cells/maven/utils/GitHelper.java | 80 +++ .../cells/maven/utils/MavenSettings.java | 88 +++ .../eclipse/wb/swt/SWTResourceManager.java | 447 ++++++++++++++++ .../AsposeCellsEclipseSite/.project | 17 + .../AsposeCellsEclipseSite/site.xml | 14 + .../LICENSE | 21 + .../README.md | 41 ++ .../Release Notes.html | 17 + 38 files changed, 3511 insertions(+) create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/.project create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/build.properties create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/feature.xml create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.classpath create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.project create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.settings/org.eclipse.jdt.core.prefs create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/build.properties create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/plugin.xml create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/Aspose.png create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/classpath-template.txt create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/long_banner.png create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/org-eclipse-jdt-core.txt create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/pom-xml-template.txt create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/Activator.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/MavenSettings.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectSupport.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectWizard.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectWizardPage.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/Metadata.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/ObjectFactory.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/maven-metada.xml create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/maven-metadata.xsd create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleSupport.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleWizard.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleWizardPage.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeCellsJavaAPI.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeConstants.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeJavaAPI.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeMavenProjectManager.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/FormatExamples.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/GitHelper.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/MavenSettings.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/org/eclipse/wb/swt/SWTResourceManager.java create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseSite/.project create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseSite/site.xml create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/LICENSE create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/README.md create mode 100644 Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/Release Notes.html diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/.project b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/.project new file mode 100644 index 00000000..d7b1f309 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/.project @@ -0,0 +1,17 @@ + + + AsposeCellsEclipseFeature + + + + + + org.eclipse.pde.FeatureBuilder + + + + + + org.eclipse.pde.FeatureNature + + diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/build.properties b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/build.properties new file mode 100644 index 00000000..82ab19c6 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/build.properties @@ -0,0 +1 @@ +bin.includes = feature.xml diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/feature.xml b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/feature.xml new file mode 100644 index 00000000..d97ac302 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/feature.xml @@ -0,0 +1,52 @@ + + + + + Aspose.Cells Maven Project wizard creates Maven Project for using +Aspose.Cells for Java API within Eclipse IDE. +"Aspose.Cells for Java is an award-winning Excel Spreadsheet +component that allows Java developers to embed the ability to +read, write and manipulate Excel® spreadsheets (XLS, XLSX, XLSM, +XLSB, XLTX, SpreadsheetML, CSV, ODS), HTML, MHTML, PDF and image +file formats into their own Java applications without needing +to rely on Microsoft Excel®. +With Aspose.Cells for Java developers can export data, format +spreadsheets to the most granular level, import images, create +charts, apply and calculate complex formulas, stream Excel® data" +Aspose.Cells Maven Project wizard fetch and configures the latest +Maven dependency reference of Aspose.Cells for Java from the +Aspose Cloud Maven Repository. +The wizard also gives you option to download the Code Examples +to use Aspose.Cells for Java API. +Once you are finished with this wizard - created Maven project +and downloaded Code Examples. Next you can insert those Code +Examples to use Aspose.Cells for Java API in your Project from +File -> New -> Other -> Aspose.Cells Code Example +The newly created project and the Code Examples you added is +now ready to be enhanced, all required resources and references +are also automatically added. + + + + The MIT License (MIT) +Copyright (c) 2001-2016 Aspose Pty Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + + diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.classpath b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.classpath new file mode 100644 index 00000000..b1dabee3 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.project b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.project new file mode 100644 index 00000000..8fe6ea15 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.project @@ -0,0 +1,28 @@ + + + AsposeCellsEclipsePlugin + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.settings/org.eclipse.jdt.core.prefs b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000..11f6e462 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/build.properties b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/build.properties new file mode 100644 index 00000000..bad26144 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/build.properties @@ -0,0 +1,7 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + plugin.xml,\ + resources/ + diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/plugin.xml b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/plugin.xml new file mode 100644 index 00000000..3903da67 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/plugin.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/Aspose.png b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/Aspose.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f1b4bfeb767bcc551ca1e97b3f693add2349c5 GIT binary patch literal 851 zcmex=n#iR?;+B1Vl97jh^&Z9FI%bn%0VaZ*teCzqJG zgrtbvx}>nyN9P&a7buactm7Wa!P7idPZheaY<=ec|~Pab4zPm zdq-#2q{&mJPMbbs=B!1Fmn>bje8tLDn>KIRx^4T8ox2VlK63Qf@e?OcUAlbb>b2`P zZr*zM=<$=M&z`?{`Re1R&tJZN`~KtSFOa_&8JHp7g8K~3U%)_MWCBJD3p>bPj7;S~ z%q+;ls%Xe2Iq+4E$QrMh*ukjF7w!YRj&ThUMs)w@QZ75iXZE{mA7uaRLWs;{;kXYY0uuK z21^7icwRhJ{psV?)sL6!CiPeh E02miNU;qFB literal 0 HcmV?d00001 diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/classpath-template.txt b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/classpath-template.txt new file mode 100644 index 00000000..fa40bfc1 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/classpath-template.txt @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/long_banner.png b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/long_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..b95465ea51842cc4caa4435ad72a9e2379ddc938 GIT binary patch literal 64954 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 + + 4.0.0 + com.mycompany + mavenproject1 + 2 + jar + + + Aspose-Maven-Repository + Aspose Maven Repository + http://maven.aspose.com/artifactory/simple/ext-release-local/ + + + + UTF-8 + 1.7 + 1.7 + + \ No newline at end of file diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/Activator.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/Activator.java new file mode 100644 index 00000000..977bff68 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/Activator.java @@ -0,0 +1,80 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + */ +public class Activator extends AbstractUIPlugin { + + // The plug-in ID + public static final String PLUGIN_ID = "AsposeCellsEclipsePlugin"; + + // The shared instance + private static Activator plugin; + + /** + * The constructor + */ + public Activator() { + } + + public static String getResourceFilePath(String resourceFileName) { + String fileURL = null; + try { + URL url = getDefault().getBundle().getEntry("resources/" + resourceFileName); + fileURL = FileLocator.toFileURL(url).toURI().normalize().getPath(); + } catch (IOException | URISyntaxException e) { + e.printStackTrace(); + } + return fileURL; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework. + * BundleContext) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework. + * BundleContext) + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/MavenSettings.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/MavenSettings.java new file mode 100644 index 00000000..86743bf1 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/MavenSettings.java @@ -0,0 +1,85 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells; + +import org.eclipse.core.runtime.preferences.IEclipsePreferences; +import org.eclipse.core.runtime.preferences.InstanceScope; + +/** + * + * @author Adeel + */ +public final class MavenSettings { + + private static final String PROP_LAST_ARCHETYPE_GROUPID = "lastArchetypeGroupId"; + private static final String PROP_LAST_ARCHETYPE_VERSION = "lastArchetypeVersion"; + + private IEclipsePreferences getPreferences() { + return InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID); + } + + /** + * + * @return + */ + public String getLastArchetypeGroupId() { + return getPreferences().get(PROP_LAST_ARCHETYPE_GROUPID, "com.mycompany"); + } + + /** + * + * @return + */ + public String getLastArchetypeVersion() { + return getPreferences().get(PROP_LAST_ARCHETYPE_VERSION, "1.0-SNAPSHOT"); + } + + /** + * + * @param version + */ + public void setLastArchetypeVersion(String version) { + putProperty(PROP_LAST_ARCHETYPE_VERSION, version); + } + + /** + * + * @param groupId + */ + public void setLastArchetypeGroupId(String groupId) { + putProperty(PROP_LAST_ARCHETYPE_GROUPID, groupId); + } + + private String putProperty(String key, String value) { + String retval = getProperty(key); + if (value != null) { + getPreferences().put(key, value); + } else { + getPreferences().remove(key); + } + return retval; + } + private static final MavenSettings INSTANCE = new MavenSettings(); + + /** + * + * @return + */ + public static MavenSettings getDefault() { + return INSTANCE; + } + + private String getProperty(String key) { + return getPreferences().get(key, null); + } + +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectSupport.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectSupport.java new file mode 100644 index 00000000..c36a321e --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectSupport.java @@ -0,0 +1,158 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven; + +import java.net.URI; +import java.nio.file.Files; +import org.eclipse.core.resources.ICommand; +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.operation.IRunnableWithProgress; +import com.aspose.cells.Activator; +import com.aspose.cells.maven.utils.AsposeJavaAPI; +import com.aspose.cells.maven.utils.AsposeMavenProjectManager; +import com.aspose.cells.maven.utils.AsposeCellsJavaAPI; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; + +public class AsposeMavenProjectSupport implements IRunnableWithProgress { + + private String projectName; + private URI location; + private String packageName; + private boolean downloadExamples; + private String version; + private String groupId; + + public AsposeMavenProjectSupport(String projectName, URI location, String packageName, boolean downloadExamples, + String version, String groupId) { + this.projectName = projectName; + this.location = location; + this.packageName = packageName; + this.downloadExamples = downloadExamples; + this.version = version; + this.groupId = groupId; + } + + @Override + public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + monitor.beginTask("Processing...", IProgressMonitor.UNKNOWN); + createProject(monitor); + monitor.done(); + } + + private IProject createProject(IProgressMonitor monitor) { + IProject project = createBaseProject(projectName, location); + try { + monitor.setTaskName("Creating project..."); + String[] paths = { "src/main/java/" + packageName.replace(".", "/"), "src/test/java", "src/main/resources" }; + addToProjectStructure(project, paths); + + Files.copy(new File(Activator.getResourceFilePath("pom-xml-template.txt")).toPath(), + new File(location.getPath() + "/pom.xml").toPath()); + Files.copy(new File(Activator.getResourceFilePath("classpath-template.txt")).toPath(), + new File(location.getPath() + "/.classpath").toPath()); + + Files.createDirectories(new File(location.getPath() + "/.settings").toPath()); + Files.copy(new File(Activator.getResourceFilePath("org-eclipse-jdt-core.txt")).toPath(), + new File(location.getPath() + "/.settings/org.eclipse.jdt.core.prefs").toPath()); + + AsposeMavenProjectManager asposeMavenProjectManager = AsposeMavenProjectManager + .initialize(new File(location)); + asposeMavenProjectManager.configureProjectMavenPOM(groupId, projectName, version); + project.refreshLocal(IResource.DEPTH_INFINITE, null); + + if (downloadExamples) { + monitor.setTaskName("Downloading code examples..."); + AsposeMavenProjectManager.initialize(new File(location)); + AsposeJavaAPI component = AsposeCellsJavaAPI.initialize(AsposeMavenProjectManager.getInstance()); + component.checkAndUpdateRepo(); + } + + } catch (CoreException e) { + e.printStackTrace(); + project = null; + } catch (IOException e) { + e.printStackTrace(); + } + + return project; + } + + private IProject createBaseProject(String projectName, URI location) { + IProject newProject = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); + String natures[] = { "org.eclipse.jdt.core.javanature", "org.eclipse.m2e.core.maven2Nature" }; + + if (!newProject.exists()) { + URI projectLocation = location; + IProjectDescription desc = newProject.getWorkspace().newProjectDescription(newProject.getName()); + + ICommand commandJavaBuilder = (ICommand) desc.newCommand(); + ICommand commandMaven2Builder = (ICommand) desc.newCommand(); + commandJavaBuilder.setBuilderName("org.eclipse.jdt.core.javabuilder"); + commandMaven2Builder.setBuilderName("org.eclipse.m2e.core.maven2Builder"); + ICommand buildspecs[] = { commandJavaBuilder, commandMaven2Builder }; + + desc.setBuildSpec(buildspecs); + desc.setNatureIds(natures); + + if (location != null && ResourcesPlugin.getWorkspace().getRoot().getLocationURI().equals(location)) { + projectLocation = null; + } + + desc.setLocationURI(projectLocation); + try { + newProject.create(desc, null); + if (!newProject.isOpen()) { + newProject.open(null); + } + } catch (CoreException e) { + e.printStackTrace(); + } + } + + return newProject; + } + + private void createFolder(IFolder folder) throws CoreException { + IContainer parent = folder.getParent(); + if (parent instanceof IFolder) { + createFolder((IFolder) parent); + } + if (!folder.exists()) { + folder.create(false, true, null); + } + } + + /** + * Create a folder structure with a parent root, overlay, and a few child + * folders. + * + * @param newProject + * @param paths + * @throws CoreException + */ + private void addToProjectStructure(IProject newProject, String[] paths) throws CoreException { + for (String path : paths) { + IFolder etcFolders = newProject.getFolder(path); + createFolder(etcFolders); + } + } + +} \ No newline at end of file diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectWizard.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectWizard.java new file mode 100644 index 00000000..71a2c149 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectWizard.java @@ -0,0 +1,54 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven; + +import java.lang.reflect.InvocationTargetException; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.ui.INewWizard; +import org.eclipse.ui.IWorkbench; + +public class AsposeMavenProjectWizard extends Wizard implements INewWizard { + + private AsposeMavenProjectWizardPage wizardPage; + + public AsposeMavenProjectWizard() { + setWindowTitle("Aspose.Cells Maven Project"); + } + + @Override + public void init(IWorkbench workbench, IStructuredSelection selection) { + + } + + @Override + public void addPages() { + super.addPages(); + wizardPage = new AsposeMavenProjectWizardPage(); + addPage(wizardPage); + } + + @Override + public boolean performFinish() { + AsposeMavenProjectSupport asposeMavenProjectSupport = new AsposeMavenProjectSupport(wizardPage.getProjectName(), + wizardPage.getLocationURI(), wizardPage.getPackageName(), wizardPage.isDownloadExamplesChecked(), + wizardPage.getVersion(), wizardPage.getGroupId()); + try { + new ProgressMonitorDialog(this.getShell()).run(true, false, asposeMavenProjectSupport); + } catch (InvocationTargetException | InterruptedException e) { + e.printStackTrace(); + } + return true; + } + +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectWizardPage.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectWizardPage.java new file mode 100644 index 00000000..f9a4e19c --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/AsposeMavenProjectWizardPage.java @@ -0,0 +1,370 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven; + +import java.io.File; +import java.net.URI; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.DirectoryDialog; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; +import org.eclipse.wb.swt.SWTResourceManager; +import com.aspose.cells.Activator; +import com.aspose.cells.maven.utils.MavenSettings; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.jface.fieldassist.ControlDecoration; +import org.eclipse.jface.fieldassist.FieldDecoration; +import org.eclipse.jface.fieldassist.FieldDecorationRegistry; + +public class AsposeMavenProjectWizardPage extends WizardPage { + + public static final String PROP_PROJECT_NAME = "projectName"; + public static final String PROP_GROUP_ID = "groupId"; + + private Text txtProjectLocation; + private Text txtProjectName; + private Text txtProjectFolder; + private Text txtArtifactId; + private Text txtGroupId; + private Text txtVersion; + private Text txtPackage; + private Button chkDownloadExamples; + + private ControlDecoration txtProjectNameDecoration; + private ControlDecoration txtProjectLocationDecoration; + private ControlDecoration txtGroupIdDecoration; + private ControlDecoration txtVersionDecoration; + private ControlDecoration txtProjectFolderDecoration; + private ControlDecoration txtPackageDecoration; + + /** + * Create the wizard. + */ + public AsposeMavenProjectWizardPage() { + super("wizardPage"); + setTitle("New Project"); + setDescription("Name and Location"); + } + + private String getDefaultProjectName() { + String defaultName = "asposemavenproject"; + IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); + try { + for (int i = 1; i < 100; i++) { + + boolean match = false; + for (IProject project : projects) { + if (project.getDescription().getName().equals(defaultName + i)) { + match = true; + break; + } + + } + if (!match) { + defaultName = defaultName + i; + break; + } + } + } catch (CoreException e) { + e.printStackTrace(); + } + return defaultName; + } + + private void initControls() { + txtGroupId.setText(MavenSettings.getDefault().getLastArchetypeGroupId()); + txtVersion.setText(MavenSettings.getDefault().getLastArchetypeVersion()); + txtProjectName.setText(getDefaultProjectName()); + txtProjectName.setSelection(txtProjectName.getCharCount()); + txtProjectLocation.setText(ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString()); + txtProjectFolder.setText(txtProjectLocation.getText() + File.separator + txtProjectName.getText()); + txtArtifactId.setText(txtProjectName.getText()); + txtPackage.setText(txtGroupId.getText() + "." + txtProjectName.getText()); + } + + private void initDecorators() { + FieldDecoration fieldDecoration = FieldDecorationRegistry.getDefault() + .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR); + + txtProjectNameDecoration = new ControlDecoration(txtProjectName, SWT.TOP | SWT.RIGHT); + txtProjectNameDecoration.setImage(fieldDecoration.getImage()); + txtProjectNameDecoration.hide(); + + txtProjectLocationDecoration = new ControlDecoration(txtProjectLocation, SWT.TOP | SWT.RIGHT); + txtProjectLocationDecoration.setImage(fieldDecoration.getImage()); + txtProjectLocationDecoration.hide(); + + txtGroupIdDecoration = new ControlDecoration(txtGroupId, SWT.TOP | SWT.RIGHT); + txtGroupIdDecoration.setImage(fieldDecoration.getImage()); + txtGroupIdDecoration.hide(); + + txtVersionDecoration = new ControlDecoration(txtVersion, SWT.TOP | SWT.RIGHT); + txtVersionDecoration.setImage(fieldDecoration.getImage()); + txtVersionDecoration.hide(); + + txtProjectFolderDecoration = new ControlDecoration(txtProjectFolder, SWT.TOP | SWT.RIGHT); + txtProjectFolderDecoration.setImage(fieldDecoration.getImage()); + txtProjectFolderDecoration.hide(); + + txtPackageDecoration = new ControlDecoration(txtPackage, SWT.TOP | SWT.RIGHT); + txtPackageDecoration.setImage(fieldDecoration.getImage()); + txtPackageDecoration.hide(); + } + + private void onProjectNameChange() { + txtProjectNameDecoration.hide(); + setPageComplete(true); + if (txtProjectName.getText().trim().length() == 0) { + txtProjectNameDecoration.setDescriptionText("Project Name is not a valid folder name"); + txtProjectNameDecoration.show(); + setPageComplete(false); + } + txtProjectFolder.setText(txtProjectLocation.getText() + File.separator + txtProjectName.getText()); + txtArtifactId.setText(txtProjectName.getText()); + txtPackage.setText("com.mycompany." + txtProjectName.getText()); + } + + private void onProjectLocationChange() { + txtProjectLocationDecoration.hide(); + setPageComplete(true); + if (!new File(txtProjectLocation.getText().trim()).isDirectory()) { + txtProjectLocationDecoration.setDescriptionText("Project Folder is not a valid path"); + txtProjectLocationDecoration.show(); + setPageComplete(false); + } + txtProjectFolder.setText(txtProjectLocation.getText() + File.separator + txtProjectName.getText()); + } + + private void onVersionChange() { + txtVersionDecoration.hide(); + setPageComplete(true); + if (txtVersion.getText().trim().length() == 0) { + txtVersionDecoration.setDescriptionText("Version may not be empty"); + txtVersionDecoration.show(); + setPageComplete(false); + } + } + + private void onPackageChange() { + txtPackageDecoration.hide(); + setPageComplete(true); + String packageName = txtPackage.getText().trim(); + if (!(packageName.equals("") + || packageName.matches("([\\p{L}_$][\\p{L}\\p{N}_$]*\\.)*[\\p{L}_$][\\p{L}\\p{N}_$]*"))) { + txtPackageDecoration.setDescriptionText("Package may not be empty"); + txtPackageDecoration.show(); + setPageComplete(false); + } + } + + private void onGroupIdChange() { + txtGroupIdDecoration.hide(); + setPageComplete(true); + if (txtGroupId.getText().trim().length() == 0) { + txtGroupIdDecoration.setDescriptionText("GroupdId may not be empty"); + txtGroupIdDecoration.show(); + setPageComplete(false); + } + txtPackage.setText(txtGroupId.getText() + "." + txtProjectName.getText()); + } + + private void onProjectFolderChange() { + txtProjectFolderDecoration.hide(); + setPageComplete(true); + File projLoc = new File( + (new File(txtProjectLocation.getText()).getAbsoluteFile()).toURI().normalize().getPath()); + File destFolder = new File( + (new File(txtProjectFolder.getText()).getAbsoluteFile()).toURI().normalize().getPath()); + + while (projLoc != null && !projLoc.exists()) { + projLoc = projLoc.getParentFile(); + } + if (projLoc == null || !projLoc.canWrite()) { + txtProjectFolderDecoration.setDescriptionText("Project Folder cannot be created"); + txtProjectFolderDecoration.show(); + setPageComplete(false); + } else { + File[] kids = destFolder.listFiles(); + if (destFolder.exists() && kids != null && kids.length > 0) { + txtProjectFolderDecoration.setDescriptionText("Project Folder already exists and is not empty"); + txtProjectFolderDecoration.show(); + setPageComplete(false); + } + } + } + + public String getProjectName() { + return txtProjectName.getText(); + } + + public String getPackageName() { + return txtPackage.getText(); + } + + public URI getLocationURI() { + return new File(txtProjectFolder.getText()).toURI(); + } + + public String getVersion() { + return txtVersion.getText(); + } + + public String getGroupId() { + return txtGroupId.getText(); + } + + public boolean isDownloadExamplesChecked() { + return chkDownloadExamples.getSelection(); + } + + /** + * Create contents of the wizard. + * + * @param parent + */ + public void createControl(Composite parent) { + Composite container = new Composite(parent, SWT.NULL); + + setControl(container); + + Label lblNewLabel = new Label(container, SWT.NONE); + lblNewLabel.setImage(SWTResourceManager.getImage(Activator.getResourceFilePath("long_banner.png"))); + lblNewLabel.setBounds(10, 0, 564, 95); + + Label lblPleaseEnterProject = new Label(container, SWT.NONE); + lblPleaseEnterProject.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD)); + lblPleaseEnterProject.setBounds(5, 98, 179, 15); + lblPleaseEnterProject.setText("Please enter project detail:"); + + Label lblPleaseEnterMaven = new Label(container, SWT.NONE); + lblPleaseEnterMaven.setText("Please enter maven artifact detail:"); + lblPleaseEnterMaven.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD)); + lblPleaseEnterMaven.setBounds(5, 194, 213, 15); + + Label lblProjectName = new Label(container, SWT.NONE); + lblProjectName.setBounds(5, 118, 84, 15); + lblProjectName.setText("Project Name:"); + + Label lblProjectLocation = new Label(container, SWT.NONE); + lblProjectLocation.setBounds(5, 146, 94, 15); + lblProjectLocation.setText("Project Location:"); + + Label lblProjectFolder = new Label(container, SWT.NONE); + lblProjectFolder.setText("Project Folder:"); + lblProjectFolder.setBounds(5, 173, 94, 15); + + Label lblArtifactId = new Label(container, SWT.NONE); + lblArtifactId.setText("Artifact Id:"); + lblArtifactId.setBounds(5, 215, 94, 15); + + Label lblGroupId = new Label(container, SWT.NONE); + lblGroupId.setText("Group Id:"); + lblGroupId.setBounds(5, 242, 94, 15); + + Label lblVersion = new Label(container, SWT.NONE); + lblVersion.setText("Version:"); + lblVersion.setBounds(5, 270, 94, 15); + + Label lblPackage = new Label(container, SWT.NONE); + lblPackage.setText("Package:"); + lblPackage.setBounds(5, 296, 94, 15); + + txtProjectName = new Text(container, SWT.BORDER); + txtProjectName.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + onProjectNameChange(); + } + }); + txtProjectName.setBounds(118, 116, 370, 21); + + txtProjectLocation = new Text(container, SWT.BORDER); + txtProjectLocation.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + onProjectLocationChange(); + } + }); + txtProjectLocation.setBounds(118, 143, 370, 21); + + Button btnNewButton = new Button(container, SWT.NONE); + btnNewButton.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + DirectoryDialog dialog = new DirectoryDialog(new Shell(), SWT.NULL); + String path = dialog.open(); + if (path != null) { + txtProjectLocation.setText(path); + } + } + }); + btnNewButton.setBounds(494, 140, 75, 25); + btnNewButton.setText("Browse..."); + + txtProjectFolder = new Text(container, SWT.BORDER); + txtProjectFolder.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + onProjectFolderChange(); + } + }); + txtProjectFolder.setEditable(false); + txtProjectFolder.setBounds(118, 170, 370, 21); + + txtArtifactId = new Text(container, SWT.BORDER); + txtArtifactId.setEnabled(false); + txtArtifactId.setEditable(false); + txtArtifactId.setBounds(118, 212, 370, 21); + + txtGroupId = new Text(container, SWT.BORDER); + txtGroupId.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + onGroupIdChange(); + } + }); + txtGroupId.setBounds(118, 239, 370, 21); + + txtVersion = new Text(container, SWT.BORDER); + txtVersion.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + onVersionChange(); + } + }); + txtVersion.setBounds(118, 266, 370, 21); + + txtPackage = new Text(container, SWT.BORDER); + txtPackage.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + onPackageChange(); + } + }); + txtPackage.setBounds(118, 293, 370, 21); + + chkDownloadExamples = new Button(container, SWT.CHECK); + chkDownloadExamples.setBounds(5, 325, 492, 16); + chkDownloadExamples.setText("Also Download Code Examples (for using Aspose.Cells for Java)"); + + Label lblNewLabel_1 = new Label(container, SWT.NONE); + lblNewLabel_1.setBounds(494, 296, 55, 15); + lblNewLabel_1.setText("(Optional)"); + + initDecorators(); + initControls(); + } +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/Metadata.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/Metadata.java new file mode 100644 index 00000000..5a945712 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/Metadata.java @@ -0,0 +1,362 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.09.26 at 03:01:37 PM PKT +// +package com.aspose.cells.maven.artifacts; + +import javax.xml.bind.annotation.*; +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * Java class for anonymous complex type. + *

+ *

+ * The following schema fragment specifies the expected content contained within + * this class. + *

+ * < + * pre> + * <complexType> <complexContent> <restriction + * base="{http://www.w3.org/2001/XMLSchema}anyType"> <sequence> <element + * name="groupId" type="{http://www.w3.org/2001/XMLSchema}string"/> <element + * name="artifactId" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="version" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="versioning"> <complexType> <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> <element name="latest" + * type="{http://www.w3.org/2001/XMLSchema}string"/> <element name="release" + * type="{http://www.w3.org/2001/XMLSchema}string"/> <element + * name="versions"> <complexType> <complexContent> <restriction + * base="{http://www.w3.org/2001/XMLSchema}anyType"> <sequence> <element + * name="version" type="{http://www.w3.org/2001/XMLSchema}string" + * maxOccurs="unbounded" minOccurs="0"/> </sequence> </restriction> + * </complexContent> </complexType> </element> <element + * name="lastUpdated" type="{http://www.w3.org/2001/XMLSchema}long"/> + * </sequence> </restriction> </complexContent> </complexType> + * </element> </sequence> </restriction> </complexContent> + * </complexType> + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "groupId", + "artifactId", + "version", + "versioning", + "classifier" +}) +@XmlRootElement(name = "metadata") +public class Metadata { + + /** + * + */ + @XmlElement(required = true) + protected String groupId; + + /** + * + */ + @XmlElement(required = true) + protected String artifactId; + + /** + * + */ + @XmlElement(required = true) + protected String version; + + /** + * + */ + @XmlElement(required = true) + protected Metadata.Versioning versioning; + + /** + * + */ + protected String classifier; + + /** + * Gets the value of the groupId property. + * + * @return possible object is {@link String } + */ + public String getGroupId() { + return groupId; + } + + /** + * Sets the value of the groupId property. + * + * @param value allowed object is {@link String } + */ + public void setGroupId(String value) { + this.groupId = value; + } + + /** + * Gets the value of the artifactId property. + * + * @return possible object is {@link String } + */ + public String getArtifactId() { + return artifactId; + } + + /** + * Sets the value of the artifactId property. + * + * @param value allowed object is {@link String } + */ + public void setArtifactId(String value) { + this.artifactId = value; + } + + /** + * Gets the value of the version property. + * + * @return possible object is {@link String } + */ + public String getVersion() { + return version; + } + + /** + * Sets the value of the version property. + * + * @param value allowed object is {@link String } + */ + public void setVersion(String value) { + this.version = value; + } + + /** + * Gets the value of the versioning property. + * + * @return possible object is {@link Metadata.Versioning } + */ + public Metadata.Versioning getVersioning() { + return versioning; + } + + /** + * Sets the value of the versioning property. + * + * @param value allowed object is {@link Metadata.Versioning } + */ + public void setVersioning(Metadata.Versioning value) { + this.versioning = value; + } + + /** + *

+ * Java class for anonymous complex type. + *

+ *

+ * The following schema fragment specifies the expected content contained + * within this class. + *

+ * < + * pre> + * <complexType> <complexContent> <restriction + * base="{http://www.w3.org/2001/XMLSchema}anyType"> <sequence> + * <element name="latest" + * type="{http://www.w3.org/2001/XMLSchema}string"/> <element + * name="release" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="versions"> <complexType> <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> <element name="version" + * type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" + * minOccurs="0"/> </sequence> </restriction> </complexContent> + * </complexType> </element> <element name="lastUpdated" + * type="{http://www.w3.org/2001/XMLSchema}long"/> </sequence> + * </restriction> </complexContent> </complexType> + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "latest", + "release", + "versions", + "lastUpdated" + }) + public static class Versioning { + + /** + * + */ + @XmlElement(required = true) + protected String latest; + + /** + * + */ + @XmlElement(required = true) + protected String release; + + /** + * + */ + @XmlElement(required = true) + protected Metadata.Versioning.Versions versions; + + /** + * + */ + protected long lastUpdated; + + /** + * Gets the value of the latest property. + * + * @return possible object is {@link String } + */ + public String getLatest() { + return latest; + } + + /** + * Sets the value of the latest property. + * + * @param value allowed object is {@link String } + */ + public void setLatest(String value) { + this.latest = value; + } + + /** + * Gets the value of the release property. + * + * @return possible object is {@link String } + */ + public String getRelease() { + return release; + } + + /** + * Sets the value of the release property. + * + * @param value allowed object is {@link String } + */ + public void setRelease(String value) { + this.release = value; + } + + /** + * Gets the value of the versions property. + * + * @return possible object is {@link Metadata.Versioning.Versions } + */ + public Metadata.Versioning.Versions getVersions() { + return versions; + } + + /** + * Sets the value of the versions property. + * + * @param value allowed object is {@link Metadata.Versioning.Versions } + */ + public void setVersions(Metadata.Versioning.Versions value) { + this.versions = value; + } + + /** + * Gets the value of the lastUpdated property. + * @return + */ + public long getLastUpdated() { + return lastUpdated; + } + + /** + * Sets the value of the lastUpdated property. + * @param value + */ + public void setLastUpdated(long value) { + this.lastUpdated = value; + } + + /** + *

+ * Java class for anonymous complex type. + *

+ *

+ * The following schema fragment specifies the expected content + * contained within this class. + *

+ * < + * pre> + * <complexType> <complexContent> <restriction + * base="{http://www.w3.org/2001/XMLSchema}anyType"> <sequence> + * <element name="version" + * type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" + * minOccurs="0"/> </sequence> </restriction> </complexContent> + * </complexType> + * + */ + @XmlAccessorType(XmlAccessType.FIELD) + @XmlType(name = "", propOrder = { + "version" + }) + public static class Versions { + + /** + * + */ + protected List version; + + /** + * Gets the value of the version property. + *

+ *

+ * This accessor method returns a reference to the live list, not a + * snapshot. Therefore any modification you make to the returned + * list will be present inside the JAXB object. This is why there is + * not a set method for the version property. + *

+ *

+ * For example, to add a new item, do as follows: + *

+             *    getVersion().add(newItem);
+             * 
+ *

+ *

+ *

+ * Objects of the following type(s) are allowed in the list + * {@link String } + * @return + */ + public List getVersion() { + if (version == null) { + version = new ArrayList(); + } + return this.version; + } + + } + + } + + /** + * Gets the value of the classifier property. + * + * @return possible object is {@link String } + */ + public String getClassifier() { + return classifier; + } + + /** + * Sets the value of the version property. + * + * @param value allowed object is {@link String } + */ + public void setClassifier(String value) { + this.classifier = value; + } + +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/ObjectFactory.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/ObjectFactory.java new file mode 100644 index 00000000..6788b329 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/ObjectFactory.java @@ -0,0 +1,55 @@ +// +// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 +// See http://java.sun.com/xml/jaxb +// Any modifications to this file will be lost upon recompilation of the source schema. +// Generated on: 2014.09.26 at 03:01:37 PM PKT +// +package com.aspose.cells.maven.artifacts; + +import javax.xml.bind.annotation.XmlRegistry; + +/** + * This object contains factory methods for each Java content interface and Java + * element interface generated in the com.aspose.maven.artifacts package. + *

+ * An ObjectFactory allows you to programatically construct new instances of the + * Java representation for XML content. The Java representation of XML content + * can consist of schema derived interfaces and classes representing the binding + * of schema type definitions, element declarations and model groups. Factory + * methods for each of these are provided in this class. + */ +@XmlRegistry +public class ObjectFactory { + + /** + * Create a new ObjectFactory that can be used to create new instances of + * schema derived classes for package: com.aspose.maven.apis.artifacts + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link Metadata.Versioning.Versions } + * @return + */ + public Metadata.Versioning.Versions createMetadataVersioningVersions() { + return new Metadata.Versioning.Versions(); + } + + /** + * Create an instance of {@link Metadata } + * @return + */ + public Metadata createMetadata() { + return new Metadata(); + } + + /** + * Create an instance of {@link Metadata.Versioning } + * @return + */ + public Metadata.Versioning createMetadataVersioning() { + return new Metadata.Versioning(); + } + +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/maven-metada.xml b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/maven-metada.xml new file mode 100644 index 00000000..1df59945 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/maven-metada.xml @@ -0,0 +1,17 @@ + + + com.aspose + aspose-cells + 14.5.0 + + 14.8.0 + 14.8.0 + + 14.5.0 + 14.6.0 + 14.7.0 + 14.8.0 + + 20140924084136 + + \ No newline at end of file diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/maven-metadata.xsd b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/maven-metadata.xsd new file mode 100644 index 00000000..6e3d358e --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/artifacts/maven-metadata.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleSupport.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleSupport.java new file mode 100644 index 00000000..06a75343 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleSupport.java @@ -0,0 +1,96 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven.examples; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; + +import org.apache.commons.io.FileUtils; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.w3c.dom.NodeList; +import com.aspose.cells.maven.utils.AsposeConstants; +import com.aspose.cells.maven.utils.AsposeMavenProjectManager; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; + +public class AsposeExampleSupport implements IRunnableWithProgress { + + private String selectedProjectPath; + private String exampleCategory; + private IProject project; + + final private static String localExampleFolder = "aspose/GitConsRepos/Aspose.Cells/Examples"; + final private static String localExampleSourceFolder = "src/main/java/com/aspose/cells/examples"; + final private static String localExampleResourceFolder = "src/main/resources/com/aspose/cells/examples"; + + public AsposeExampleSupport(String selectedProjectPath, String exampleCategory, IProject project) { + this.selectedProjectPath = selectedProjectPath; + this.exampleCategory = exampleCategory; + this.project = project; + } + + @Override + public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + monitor.beginTask("Adding example code in project " + project.getName() + "...", IProgressMonitor.UNKNOWN); + createExample(); + monitor.done(); + } + + public void createExample() { + String srcExamplePath = System.getProperty("user.home") + File.separator + localExampleFolder + File.separator + + localExampleSourceFolder; + String srcExampleResourcePath = System.getProperty("user.home") + File.separator + localExampleFolder + + File.separator + localExampleResourceFolder; + + String destProjectExamplePath = selectedProjectPath + File.separator + localExampleSourceFolder; + String destProjectExampleResourcePath = selectedProjectPath + File.separator + localExampleResourceFolder; + + File srcExampleCategoryPath = new File(srcExamplePath + File.separator + exampleCategory); + File destExampleCategoryPath = new File(destProjectExamplePath + File.separator + exampleCategory); + + Path srcUtil = new File(srcExamplePath + File.separator + "Utils.java").toPath(); + Path destUtil = new File(destProjectExamplePath + File.separator + "Utils.java").toPath(); + + File srcExampleResourceCategoryPath = new File(srcExampleResourcePath + File.separator + exampleCategory); + File destExampleResourceCategoryPath = new File( + destProjectExampleResourcePath + File.separator + exampleCategory); + + String repositoryPOM_XML = System.getProperty("user.home") + File.separator + localExampleFolder + + File.separator + AsposeConstants.MAVEN_POM_XML; + + try { + FileUtils.copyDirectory(srcExampleCategoryPath, destExampleCategoryPath); + Files.copy(srcUtil, destUtil, StandardCopyOption.REPLACE_EXISTING); + FileUtils.copyDirectory(srcExampleResourceCategoryPath, destExampleResourceCategoryPath); + + 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); + + project.refreshLocal(IResource.DEPTH_INFINITE, null); + + } catch (IOException | CoreException e) { + e.printStackTrace(); + } + + } +} \ No newline at end of file diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleWizard.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleWizard.java new file mode 100644 index 00000000..513161a6 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleWizard.java @@ -0,0 +1,61 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven.examples; + +import java.lang.reflect.InvocationTargetException; + +import org.eclipse.core.resources.IProject; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.ui.INewWizard; +import org.eclipse.ui.IWorkbench; + +public class AsposeExampleWizard extends Wizard implements INewWizard { + + private AsposeExampleWizardPage wizardPage; + + public AsposeExampleWizard() { + setWindowTitle("Aspose.Cells Code Example"); + } + + @Override + public void init(IWorkbench workbench, IStructuredSelection selection) { + + } + + @Override + public void addPages() { + super.addPages(); + wizardPage = new AsposeExampleWizardPage(); + addPage(wizardPage); + } + + @Override + public boolean performFinish() { + + String selectedProjectPath = wizardPage.getSelectedProjectPath(); + String exampleCategory = wizardPage.getSelectedExampleCategory(); + IProject project = wizardPage.getIProject(); + + AsposeExampleSupport asposeExampleSupport = new AsposeExampleSupport(selectedProjectPath, exampleCategory, + project); + try { + new ProgressMonitorDialog(this.getShell()).run(true, false, asposeExampleSupport); + } catch (InvocationTargetException | InterruptedException e) { + e.printStackTrace(); + } + + return true; + } + +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleWizardPage.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleWizardPage.java new file mode 100644 index 00000000..769ccfb0 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/examples/AsposeExampleWizardPage.java @@ -0,0 +1,307 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven.examples; + +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.net.URI; +import java.util.LinkedList; +import java.util.Queue; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.jface.fieldassist.ControlDecoration; +import org.eclipse.jface.fieldassist.FieldDecoration; +import org.eclipse.jface.fieldassist.FieldDecorationRegistry; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.swt.widgets.TreeItem; +import org.eclipse.swt.widgets.Label; +import org.eclipse.wb.swt.SWTResourceManager; +import com.aspose.cells.Activator; +import com.aspose.cells.maven.utils.AsposeConstants; +import com.aspose.cells.maven.utils.AsposeJavaAPI; +import com.aspose.cells.maven.utils.AsposeMavenProjectManager; +import com.aspose.cells.maven.utils.AsposeCellsJavaAPI; +import com.aspose.cells.maven.utils.FormatExamples; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.ModifyEvent; + +public class AsposeExampleWizardPage extends WizardPage { + + private Combo cbProject; + private Combo cbVersion; + private Tree examplesTree; + + private ControlDecoration cbProjectDecoration; + private ControlDecoration cbVersionDecoration; + private ControlDecoration examplesTreeDecoration; + + /** + * Create the wizard. + */ + public AsposeExampleWizardPage() { + super("wizardPage"); + setTitle("New Aspose.Cells Code Example"); + setDescription("Aspose.Cells Java API - Code Examples"); + } + + public IProject getIProject() { + return (IProject) cbProject.getData(cbProject.getText()); + } + + public String getSelectedProjectPath() { + String projectPath = null; + try { + IProject project = (IProject) cbProject.getData(cbProject.getText()); + projectPath = project.getDescription().getLocationURI().getPath(); + + } catch (CoreException e) { + e.printStackTrace(); + } + return projectPath; + } + + public String getSelectedProjectName() { + return cbProject.getText(); + } + + public String getSelectedExampleCategory() { + TreeItem selectedTreeItem = examplesTree.getSelection()[0]; + String selectedCategory = selectedTreeItem.getText().trim().replace(' ', '_').toLowerCase(); + + while (selectedTreeItem.getParentItem().getParentItem() != null) { + selectedTreeItem = selectedTreeItem.getParentItem(); + selectedCategory = selectedTreeItem.getText().trim().replace(' ', '_').toLowerCase() + "/" + + selectedCategory; + } + return selectedCategory; + } + + private void downloadExamplesRepo() { + // download code examples with status progress + try { + new ProgressMonitorDialog(this.getShell()).run(true, false, new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + monitor.beginTask("Downloading latest example categories...", IProgressMonitor.UNKNOWN); + + AsposeMavenProjectManager.initialize(null); + AsposeJavaAPI component = AsposeCellsJavaAPI.initialize(AsposeMavenProjectManager.getInstance()); + component.checkAndUpdateRepo(); + + monitor.done(); + } + }); + } catch (InvocationTargetException | InterruptedException e) { + e.printStackTrace(); + } + } + + private void initControls() { + + downloadExamplesRepo(); + + IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); + URI path = null; + try { + for (IProject project : projects) { + path = project.getDescription().getLocationURI(); + if (path != null) { + cbProject.add(project.getDescription().getName()); + cbProject.setData(project.getDescription().getName(), project); + } + } + cbProjectDecoration.hide(); + setPageComplete(true); + if (cbProject.getItemCount() == 0) { + cbProject.add(AsposeConstants.API_PROJECT_NOT_FOUND); + cbProjectDecoration.show(); + setPageComplete(false); + } + + cbProject.select(0); + } catch (CoreException e) { + e.printStackTrace(); + } + } + + private void initDecorators() { + FieldDecoration fieldDecoration = FieldDecorationRegistry.getDefault() + .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR); + + cbProjectDecoration = new ControlDecoration(cbProject, SWT.TOP | SWT.RIGHT); + cbProjectDecoration.setImage(fieldDecoration.getImage()); + cbProjectDecoration.setDescriptionText("Please first create a Maven project"); + cbProjectDecoration.hide(); + + cbVersionDecoration = new ControlDecoration(cbVersion, SWT.TOP | SWT.RIGHT); + cbVersionDecoration.setImage(fieldDecoration.getImage()); + cbVersionDecoration.setDescriptionText( + "Please first add maven dependency of " + AsposeConstants.API_NAME + " for java API"); + cbVersionDecoration.hide(); + + examplesTreeDecoration = new ControlDecoration(examplesTree, SWT.TOP | SWT.RIGHT); + examplesTreeDecoration.setImage(fieldDecoration.getImage()); + examplesTreeDecoration.setDescriptionText("Please select one example category"); + examplesTreeDecoration.hide(); + } + + private void onProjectModify() { + try { + cbVersion.removeAll(); + IProject selectedProject = (IProject) cbProject.getData(cbProject.getText()); + if (selectedProject != null) { + String versionNo = AsposeMavenProjectManager.getInstance().getDependencyVersionFromPOM( + selectedProject.getDescription().getLocationURI(), AsposeConstants.API_MAVEN_DEPENDENCY); + cbVersionDecoration.hide(); + setPageComplete(true); + if (versionNo == null) { + cbVersionDecoration.show(); + setPageComplete(false); + } + if (versionNo == null) { + versionNo = AsposeConstants.API_DEPENDENCY_NOT_FOUND; + } + cbVersion.add(versionNo); + cbVersion.select(0); + } + } catch (CoreException e) { + e.printStackTrace(); + } + + } + + private void onVersionModify() { + try { + examplesTree.removeAll(); + if (!cbVersion.getText().equals(AsposeConstants.API_DEPENDENCY_NOT_FOUND)) { + IProject selectedProject = (IProject) cbProject.getData(cbProject.getText()); + if (selectedProject != null) { + AsposeMavenProjectManager.initialize(new File(selectedProject.getDescription().getLocationURI())); + AsposeJavaAPI component = AsposeCellsJavaAPI.initialize(AsposeMavenProjectManager.getInstance()); + populateExamplesTree(component); + examplesTreeDecoration.show(); + setPageComplete(false); + } + } + } catch (CoreException e) { + e.printStackTrace(); + } + } + + private void onTreeSelection() { + examplesTreeDecoration.show(); + setPageComplete(false); + TreeItem[] selectedItems = examplesTree.getSelection(); + if (selectedItems[0].getParentItem() != null && selectedItems[0].getItemCount() > 0) { + examplesTreeDecoration.hide(); + setPageComplete(true); + } + } + + /** + * + * @param asposeComponent + * @param top + * @param panel + */ + public void populateExamplesTree(AsposeJavaAPI asposeComponent) { + String examplesFullPath = asposeComponent.getLocalRepositoryPath() + File.separator + + AsposeConstants.GITHUB_EXAMPLES_SOURCE_LOCATION; + File directory = new File(examplesFullPath); + examplesTree.removeAll(); + Queue queue = new LinkedList<>(); + queue.add(new Object[] { null, directory }); + TreeItem top = new TreeItem(examplesTree, 0); + top.setText("Aspose.Cells"); + + while (!queue.isEmpty()) { + Object[] _entry = queue.remove(); + File childFile = ((File) _entry[1]); + TreeItem parentItem = (TreeItem) _entry[0]; + if (childFile.isDirectory()) { + if (parentItem != null) { + TreeItem child = new TreeItem(parentItem, SWT.NONE); + child.setText(FormatExamples.formatTitle(childFile.getName())); + parentItem = child; + } else { + parentItem = top; + } + for (File f : childFile.listFiles()) { + queue.add(new Object[] { parentItem, f }); + } + } else if (childFile.isFile()) { + TreeItem child = new TreeItem(parentItem, SWT.NONE); + child.setText(FormatExamples.formatTitle(childFile.getName())); + } + } + } + + /** + * Create contents of the wizard. + * + * @param parent + */ + public void createControl(Composite parent) { + Composite container = new Composite(parent, SWT.NULL); + + setControl(container); + + cbProject = new Combo(container, SWT.READ_ONLY); + cbProject.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + onProjectModify(); + } + }); + cbProject.setBounds(181, 101, 366, 23); + + examplesTree = new Tree(container, SWT.BORDER); + examplesTree.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + onTreeSelection(); + } + }); + examplesTree.setBounds(27, 170, 520, 140); + + Label label = new Label(container, SWT.NONE); + label.setImage(SWTResourceManager.getImage(Activator.getResourceFilePath("long_banner.png"))); + label.setBounds(10, 0, 564, 95); + + Label lblProject = new Label(container, SWT.NONE); + lblProject.setBounds(134, 104, 40, 15); + lblProject.setText("Project:"); + + Label lblAsposecellsForJava = new Label(container, SWT.NONE); + lblAsposecellsForJava.setBounds(5, 131, 170, 15); + lblAsposecellsForJava.setText("Aspose.Cells for Java (version):"); + + cbVersion = new Combo(container, SWT.READ_ONLY); + cbVersion.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + onVersionModify(); + } + }); + cbVersion.setBounds(181, 128, 366, 23); + + initDecorators(); + initControls(); + } +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeCellsJavaAPI.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeCellsJavaAPI.java new file mode 100644 index 00000000..6d6c269c --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeCellsJavaAPI.java @@ -0,0 +1,78 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven.utils; + +/* + * @author Adeel Ilyas + * + */ +// Singleton Class + +/** + * + * @author Adeel + */ +public class AsposeCellsJavaAPI extends AsposeJavaAPI { + + private final String _name = AsposeConstants.API_NAME; + private final String _mavenRepositoryURL = "http://maven.aspose.com/repository/ext-release-local/com/aspose/aspose-cells/"; + private final String _remoteExamplesRepository = "https://github.com/asposecells/Aspose_Cells_Java"; + + /** + * @return the _name + */ + @Override + public String get_name() { + return _name; + } + + /** + * @return the _mavenRepositoryURL + */ + @Override + public String get_mavenRepositoryURL() { + return _mavenRepositoryURL; + } + + /** + * @return the _remoteExamplesRepository + */ + @Override + public String get_remoteExamplesRepository() { + return _remoteExamplesRepository; + } + + // Singleton instance + private static AsposeJavaAPI asposeCellsAPI; + + /** + * + * @return + */ + public static AsposeJavaAPI getInstance() { + return asposeCellsAPI; + } + + /** + * + * @param asposeMavenProjectManager + * @return + */ + public static AsposeJavaAPI initialize(AsposeMavenProjectManager asposeMavenProjectManager) { + asposeCellsAPI = new AsposeCellsJavaAPI(); + asposeCellsAPI.asposeMavenProjectManager = asposeMavenProjectManager; + return asposeCellsAPI; + } + + private AsposeCellsJavaAPI() { + } +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeConstants.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeConstants.java new file mode 100644 index 00000000..b0166254 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeConstants.java @@ -0,0 +1,146 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven.utils; + +/* + * @author Adeel Ilyas + */ +import java.io.File; + +/** + * + * @author Adeel + */ +public class AsposeConstants { + + /** + * + */ + public static final String API_NAME = "Aspose.Cells"; + + /** + * + */ + public static final String API_MAVEN_DEPENDENCY = "aspose-cells"; + + /** + * + */ + public static final String API_EXAMPLES_PACKAGE = "com" + File.separator + API_MAVEN_DEPENDENCY.replace("-", File.separator) + File.separator + "examples"; + + /** + * + */ + public static final String GITHUB_EXAMPLES_SOURCE_LOCATION = "Examples" + File.separator + "src" + File.separator + "main" + File.separator + "java" + File.separator + API_EXAMPLES_PACKAGE; + + /** + * + */ + public static final String GITHUB_EXAMPLES_RESOURCES_LOCATION = "Examples" + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + API_EXAMPLES_PACKAGE; + + /** + * + */ + public static final String PROJECT_EXAMPLES_SOURCE_LOCATION = "src" + File.separator + "main" + File.separator + "java" + File.separator + API_EXAMPLES_PACKAGE; + + /** + * + */ + public static final String PROJECT_EXAMPLES_RESOURCES_LOCATION = "src" + File.separator + "main" + File.separator + "resources" + File.separator + API_EXAMPLES_PACKAGE; + + /** + * + */ + public static final String EXAMPLES_UTIL = GITHUB_EXAMPLES_SOURCE_LOCATION + File.separator + "Utils.java"; + + /** + * + */ + public static final String API_DEPENDENCY_NOT_FOUND = "Dependency not found!"; + + public static final String API_PROJECT_NOT_FOUND = "No projects found!"; + + /** + * + */ + public static final String MAVEN_POM_XML = "pom.xml"; + + /** + * + */ + public static final String WIZARD_NAME = "Aspose.Cells Maven Project"; + + /** + * + */ + public static final String ASPOSE_SELECT_EXAMPLE = "Please just select one examples category"; + + /** + * + */ + public static final String INTERNET_CONNNECTIVITY_PING_URL = "java.sun.com"; + + /** + * + */ + public static final String ASPOSE_MAVEN_REPOSITORY = "http://maven.aspose.com"; + + /** + * + */ + public static final String ASPOSE_GROUP_ID = "com.aspose"; + + /** + * + */ + public static final String INTERNET_REQUIRED_MSG = "Internet connectivity is not available!\nInternet connectivity is required to retrieve latest Aspose.Cells Maven Artifact"; + + /** + * + */ + public static final String EXAMPLES_INTERNET_REQUIRED_MSG = "Internet connectivity is required to download examples"; + + /** + * + */ + public static final String MAVEN_ARTIFACTS_RETRIEVE_FAIL = "Unknown Error!\nCould not retrieve latest Aspose.Cells Maven Artifact!"; + + /** + * + */ + public static final String EXAMPLES_DOWNLOAD_FAIL = "Unknown Error!\nCould not download Aspose.Cells for Java API example Source codes!"; + + /** + * + */ + public static final String EXAMPLES_NOT_AVAILABLE_MSG = "This component does not have examples yet, We will add examples soon"; + + /** + * + */ + public static final String EXAMPLES_NOT_AVAILABLE_TITLE = "Examples not available"; + + /** + * + */ + public static boolean printingAllowed = false; + + /** + * + * @param message + */ + public static final void println(String message) { + if (printingAllowed) { + System.out.println(message); + } + } +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeJavaAPI.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeJavaAPI.java new file mode 100644 index 00000000..5bd689ea --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeJavaAPI.java @@ -0,0 +1,159 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven.utils; + +import javax.swing.*; +import java.io.File; + + +public abstract class AsposeJavaAPI { + + /** + * + * @return + */ + public abstract String get_name(); + + /** + * + * @return + */ + public abstract String get_mavenRepositoryURL(); + + /** + * + * @return + */ + public abstract String get_remoteExamplesRepository(); + + /** + * + * @return + */ + public boolean isExamplesNotAvailable() { + return examplesNotAvailable; + } + + /** + * + */ + public boolean examplesNotAvailable; + + /** + * + * @return + */ + public boolean isExamplesDefinitionAvailable() { + return examplesDefinitionAvailable; + } + + /** + * + */ + public boolean examplesDefinitionAvailable; + + /** + * + */ + public AsposeMavenProjectManager asposeMavenProjectManager; + + /** + * + * @param p + */ + public void checkAndUpdateRepo() { + + if (null == get_remoteExamplesRepository()) { + AsposeMavenProjectManager.showMessage(AsposeConstants.EXAMPLES_NOT_AVAILABLE_TITLE, get_name() + " - " + AsposeConstants.EXAMPLES_NOT_AVAILABLE_MSG, JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE); + examplesNotAvailable = true; + examplesDefinitionAvailable = false; + return; + } else { + examplesNotAvailable = false; + } + + if (isExamplesDefinitionsPresent()) { + try { + examplesDefinitionAvailable = true; + syncRepository(); + } catch (Exception e) { + } + } else { + updateRepository(); + if (isExamplesDefinitionsPresent()) { + examplesDefinitionAvailable = true; + + } + } + } + + /** + * + * @param p + * @return + */ + public boolean downloadExamples() { + try { + checkAndUpdateRepo(); + } catch (Exception rex) { + rex.printStackTrace(); + return false; + } + + return true; + + } + + /** + * + * @param p + */ + public void updateRepository() { + AsposeMavenProjectManager.checkAndCreateFolder(getLocalRepositoryPath()); + + try { + GitHelper.updateRepository(getLocalRepositoryPath(), get_remoteExamplesRepository()); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * + * @param p + */ + public void syncRepository() { + try { + GitHelper.syncRepository(getLocalRepositoryPath(), get_remoteExamplesRepository()); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * + * @return boolean + */ + public boolean isExamplesDefinitionsPresent() { + return new File(getLocalRepositoryPath()).exists(); + } + + /** + * + * @return String + */ + public String getLocalRepositoryPath() { + return asposeMavenProjectManager.getAsposeHomePath() + "GitConsRepos" + File.separator + get_name(); + } +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeMavenProjectManager.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeMavenProjectManager.java new file mode 100644 index 00000000..8a48f411 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/AsposeMavenProjectManager.java @@ -0,0 +1,499 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven.utils; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringReader; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JOptionPane; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpression; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; +import com.aspose.cells.maven.artifacts.Metadata; +import com.aspose.cells.maven.artifacts.ObjectFactory; + +public class AsposeMavenProjectManager { + + private File projectDir = null; + + private static final List asposeProjectMavenDependencies = new ArrayList(); + + /** + * + * @return + */ + public static List getAsposeProjectMavenDependencies() { + return asposeProjectMavenDependencies; + } + + /** + * + */ + public static void clearAsposeProjectMavenDependencies() { + asposeProjectMavenDependencies.clear(); + } + + /** + * + * @return + */ + public File getProjectDir() { + return projectDir; + } + + public String getDependencyVersionFromPOM(URI projectDir, String dependencyName) { + try { + String mavenPomXmlfile = projectDir.getPath() + File.separator + AsposeConstants.MAVEN_POM_XML; + + if (new File(mavenPomXmlfile).exists()) { + Document pomDocument = getXmlDocument(mavenPomXmlfile); + + XPathFactory xPathfactory = XPathFactory.newInstance(); + XPath xpath = xPathfactory.newXPath(); + String expression = "//version[ancestor::dependency/artifactId[text()='" + dependencyName + "']]"; + XPathExpression xPathExpr = xpath.compile(expression); + NodeList nl = (NodeList) xPathExpr.evaluate(pomDocument, XPathConstants.NODESET); + + if (nl != null && nl.getLength() > 0) { + return nl.item(0).getTextContent(); + } + } + } catch (Exception ex) { + ex.printStackTrace(); + } + return null; + } + + private Document getXmlDocument(String mavenPomXmlfile) + throws ParserConfigurationException, SAXException, IOException { + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); + Document pomDocument = (Document) docBuilder.parse(mavenPomXmlfile); + + return pomDocument; + } + + public String getAsposeHomePath() { + return System.getProperty("user.home") + File.separator + "aspose" + File.separator; + } + + /** + * + * @param folderPath + */ + public static void checkAndCreateFolder(String folderPath) { + File folder = new File(folderPath); + if (!folder.exists()) { + folder.mkdirs(); + } + } + + // Singleton instance + private static AsposeMavenProjectManager asposeMavenProjectManager = new AsposeMavenProjectManager(); + + /** + * + * @return + */ + public static AsposeMavenProjectManager getInstance() { + return asposeMavenProjectManager; + } + + /** + * + * @param mavenPomXmlfile + * @param excludeGroup + * @return + */ + public NodeList getDependenciesFromPOM(String mavenPomXmlfile, String excludeGroup) { + try { + Document pomDocument = getXmlDocument(mavenPomXmlfile); + + XPathFactory xPathfactory = XPathFactory.newInstance(); + XPath xpath = xPathfactory.newXPath(); + String expression = "//dependency[child::groupId[text()!='" + excludeGroup + "']]"; + XPathExpression xPathExpr = xpath.compile(expression); + NodeList nl = (NodeList) xPathExpr.evaluate(pomDocument, XPathConstants.NODESET); + if (nl != null && nl.getLength() > 0) { + return nl; + } + } catch (IOException | ParserConfigurationException | SAXException | XPathExpressionException e) { + e.printStackTrace(); + } + return null; + } + + /** + * + * @param addTheseDependencies + */ + public void addMavenDependenciesInProject(NodeList addTheseDependencies) { + + String mavenPomXmlfile = projectDir.getPath() + File.separator + AsposeConstants.MAVEN_POM_XML; + + try { + Document pomDocument = getXmlDocument(mavenPomXmlfile); + Node dependenciesNode = pomDocument.getElementsByTagName("dependencies").item(0); + + if (addTheseDependencies != null && addTheseDependencies.getLength() > 0) { + for (int n = 0; n < addTheseDependencies.getLength(); n++) { + String artifactId = addTheseDependencies.item(n).getFirstChild().getNextSibling().getNextSibling() + .getNextSibling().getFirstChild().getNodeValue(); + + XPathFactory xPathfactory = XPathFactory.newInstance(); + XPath xpath = xPathfactory.newXPath(); + String expression = "//artifactId[text()='" + artifactId + "']"; + + XPathExpression xPathExpr = xpath.compile(expression); + + Node dependencyAlreadyExist = (Node) xPathExpr.evaluate(pomDocument, XPathConstants.NODE); + + if (dependencyAlreadyExist != null) { + Node dependencies = pomDocument.getElementsByTagName("dependencies").item(0); + dependencies.removeChild(dependencyAlreadyExist.getParentNode()); + } + + Node importedNode = pomDocument.importNode(addTheseDependencies.item(n), true); + dependenciesNode.appendChild(importedNode); + } + } + removeEmptyLinesfromDOM(pomDocument); + writeToPOM(pomDocument); + + } catch (ParserConfigurationException | SAXException | XPathExpressionException | IOException ex) { + ex.printStackTrace(); + } + } + + /** + * + * @return + */ + private boolean retrieveAsposeMavenDependencies() { + try { + getAsposeProjectMavenDependencies().clear(); + AsposeJavaAPI component = AsposeCellsJavaAPI.getInstance(); + Metadata productMavenDependency = getProductMavenDependency(component.get_mavenRepositoryURL()); + if (productMavenDependency != null) { + getAsposeProjectMavenDependencies().add(productMavenDependency); + } + + } catch (Exception rex) { + rex.printStackTrace(); + return false; + } + return !getAsposeProjectMavenDependencies().isEmpty(); + } + + public void configureProjectMavenPOM(String groupId, String artifactId, String version) throws IOException { + + AsposeCellsJavaAPI.initialize(asposeMavenProjectManager); + retrieveAsposeMavenDependencies(); + + try { + String mavenPomXmlfile = projectDir.getPath() + File.separator + AsposeConstants.MAVEN_POM_XML; + Document doc = getXmlDocument(mavenPomXmlfile); + + Element root = doc.getDocumentElement(); + Node node = root.getElementsByTagName("groupId").item(0); + node.setTextContent(groupId); + + node = root.getElementsByTagName("artifactId").item(0); + node.setTextContent(artifactId); + + node = root.getElementsByTagName("version").item(0); + node.setTextContent(version); + + updateProjectPom(doc); + writeToPOM(doc); + + } catch (ParserConfigurationException | SAXException e) { + e.printStackTrace(); + } + + } + + private void updateProjectPom(Document pomDocument) { + + // Get the root element + Node projectNode = pomDocument.getFirstChild(); + + // Adding Dependencies here + Element dependenciesTag = pomDocument.createElement("dependencies"); + projectNode.appendChild(dependenciesTag); + + for (Metadata dependency : getAsposeProjectMavenDependencies()) { + addAsposeMavenDependency(pomDocument, dependenciesTag, dependency); + } + } + + private void addAsposeMavenDependency(Document doc, Element dependenciesTag, Metadata dependency) { + Element dependencyTag = doc.createElement("dependency"); + dependenciesTag.appendChild(dependencyTag); + + Element groupIdTag = doc.createElement("groupId"); + groupIdTag.appendChild(doc.createTextNode(dependency.getGroupId())); + dependencyTag.appendChild(groupIdTag); + + Element artifactId = doc.createElement("artifactId"); + artifactId.appendChild(doc.createTextNode(dependency.getArtifactId())); + dependencyTag.appendChild(artifactId); + Element version = doc.createElement("version"); + version.appendChild(doc.createTextNode(dependency.getVersioning().getLatest())); + dependencyTag.appendChild(version); + if (dependency.getClassifier() != null) { + Element classifer = doc.createElement("classifier"); + classifer.appendChild(doc.createTextNode(dependency.getClassifier())); + dependencyTag.appendChild(classifer); + } + } + + /** + * + * @param Url + * @return + * @throws IOException + */ + public String readURLContents(String Url) throws IOException { + URL url = new URL(Url); + URLConnection con = url.openConnection(); + InputStream in = con.getInputStream(); + String encoding = con.getContentEncoding(); + encoding = encoding == null ? "UTF-8" : encoding; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[8192]; + int len = 0; + while ((len = in.read(buf)) != -1) { + baos.write(buf, 0, len); + } + String body = new String(baos.toByteArray(), encoding); + return body; + } + + /** + * + * @param productMavenRepositoryUrl + * @return + */ + public Metadata getProductMavenDependency(String productMavenRepositoryUrl) { + final String mavenMetaDataFileName = "maven-metadata.xml"; + Metadata data = null; + + try { + String productMavenInfo; + productMavenInfo = readURLContents(productMavenRepositoryUrl + mavenMetaDataFileName); + JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class); + Unmarshaller unmarshaller; + unmarshaller = jaxbContext.createUnmarshaller(); + + data = (Metadata) unmarshaller.unmarshal(new StreamSource(new StringReader(productMavenInfo))); + + String remoteArtifactFile = productMavenRepositoryUrl + data.getVersioning().getLatest() + "/" + + data.getArtifactId() + "-" + data.getVersioning().getLatest(); + + if (!remoteFileExists(remoteArtifactFile + ".jar")) { + AsposeConstants.println("Not Exists"); + data.setClassifier(getResolveSupportedJDK(remoteArtifactFile)); + } else { + AsposeConstants.println("Exists"); + } + } catch (IOException | JAXBException ex) { + ex.printStackTrace(); + data = null; + } + return data; + } + + /** + * + * @param URLName + * @return + */ + public boolean remoteFileExists(String URLName) { + try { + HttpURLConnection.setFollowRedirects(false); + // note : you may also need + // HttpURLConnection.setInstanceFollowRedirects(false) + HttpURLConnection con = (HttpURLConnection) new URL(URLName).openConnection(); + con.setRequestMethod("HEAD"); + return (con.getResponseCode() == HttpURLConnection.HTTP_OK); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * + * @param ProductURL + * @return + */ + public String getResolveSupportedJDK(String ProductURL) { + String supportedJDKs[] = { "jdk17", "jdk16", "jdk15", "jdk14", "jdk18" }; + String classifier = null; + for (String jdkCheck : supportedJDKs) { + if (remoteFileExists(ProductURL + "-" + jdkCheck + ".jar")) { + AsposeConstants.println("Exists"); + classifier = jdkCheck; + break; + } else { + AsposeConstants.println("Not Exists"); + } + } + return classifier; + } + + /** + * + * @param mavenPomXmlfile + * @param excludeURL + * @return + */ + public NodeList getRepositoriesFromPOM(String mavenPomXmlfile, String excludeURL) { + try { + Document pomDocument = getXmlDocument(mavenPomXmlfile); + XPathFactory xPathfactory = XPathFactory.newInstance(); + XPath xpath = xPathfactory.newXPath(); + String expression = "//repository[child::url[not(starts-with(.,'" + excludeURL + "'))]]"; + XPathExpression xPathExpr = xpath.compile(expression); + NodeList nl = (NodeList) xPathExpr.evaluate(pomDocument, XPathConstants.NODESET); + if (nl != null && nl.getLength() > 0) { + return nl; + } + } catch (IOException | ParserConfigurationException | SAXException | XPathExpressionException e) { + e.printStackTrace(); + } + return null; + } + + /** + * + * @param addTheseRepositories + */ + public void addMavenRepositoriesInProject(NodeList addTheseRepositories) { + String mavenPomXmlfile = projectDir.getPath() + File.separator + AsposeConstants.MAVEN_POM_XML; + try { + Document pomDocument = getXmlDocument(mavenPomXmlfile); + + Node repositoriesNode = pomDocument.getElementsByTagName("repositories").item(0); + + if (addTheseRepositories != null && addTheseRepositories.getLength() > 0) { + for (int n = 0; n < addTheseRepositories.getLength(); n++) { + String repositoryId = addTheseRepositories.item(n).getFirstChild().getNextSibling().getFirstChild() + .getNodeValue(); + + XPathFactory xPathfactory = XPathFactory.newInstance(); + XPath xpath = xPathfactory.newXPath(); + String expression = "//id[text()='" + repositoryId + "']"; + + XPathExpression xPathExpr = xpath.compile(expression); + + Boolean repositoryAlreadyExist = (Boolean) xPathExpr.evaluate(pomDocument, XPathConstants.BOOLEAN); + + if (!repositoryAlreadyExist) { + Node importedNode = pomDocument.importNode(addTheseRepositories.item(n), true); + repositoriesNode.appendChild(importedNode); + } + + } + } + removeEmptyLinesfromDOM(pomDocument); + writeToPOM(pomDocument); + + } catch (XPathExpressionException | SAXException | ParserConfigurationException | IOException ex) { + ex.printStackTrace(); + } + } + + /** + * + * @param pomDocument + * @throws IOException + */ + public void writeToPOM(Document pomDocument) throws IOException { + try { + TransformerFactory tFactory = TransformerFactory.newInstance(); + Transformer transformer = tFactory.newTransformer(); + DOMSource source = new DOMSource(pomDocument); + + StreamResult result = new StreamResult( + new File(projectDir + File.separator + AsposeConstants.MAVEN_POM_XML)); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); + transformer.setOutputProperty(OutputKeys.METHOD, "xml"); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); + + transformer.transform(source, result); + } catch (TransformerException e) { + e.printStackTrace(); + } + } + + private void removeEmptyLinesfromDOM(Document doc) throws XPathExpressionException { + XPath xp = XPathFactory.newInstance().newXPath(); + NodeList nl = (NodeList) xp.evaluate("//text()[normalize-space(.)='']", doc, XPathConstants.NODESET); + + for (int i = 0; i < nl.getLength(); ++i) { + Node node = nl.item(i); + node.getParentNode().removeChild(node); + } + } + + /** + * + * @param title + * @param message + * @param buttons + * @param icon + * @return + */ + public static int showMessage(String title, String message, int buttons, int icon) { + int result = JOptionPane.showConfirmDialog(null, message, title, buttons, icon); + return result; + } + + public static AsposeMavenProjectManager initialize(File prjDir) { + asposeMavenProjectManager = new AsposeMavenProjectManager(); + asposeMavenProjectManager.projectDir = prjDir; + return asposeMavenProjectManager; + } + +} \ No newline at end of file diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/FormatExamples.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/FormatExamples.java new file mode 100644 index 00000000..ad6ac955 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/FormatExamples.java @@ -0,0 +1,30 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven.utils; + +import org.apache.commons.lang.WordUtils; + +public class FormatExamples { + + /** + * + * @param inputStr + * @return + */ + public static String formatTitle(String inputStr) { + String title = inputStr.replaceAll("(_|.java|\\.)", " "); + title = title.replaceAll("([A-Z])", " $1"); + title = WordUtils.capitalize(title); + + return title; + } +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/GitHelper.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/GitHelper.java new file mode 100644 index 00000000..70e0c365 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/GitHelper.java @@ -0,0 +1,80 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.aspose.cells.maven.utils; + +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.internal.storage.file.FileRepository; +import org.eclipse.jgit.lib.Repository; + +import java.io.File; + +/** + * @author Adeel Ilyas + * + */ +public class GitHelper { + + /** + * + * @param localPath + * @param remotePath + * @throws Exception + */ + public static void updateRepository(String localPath, String remotePath) throws Exception { + Repository localRepo; + try { + localRepo = new FileRepository(localPath + "/.git"); + + Git git = new Git(localRepo); + + // First try to clone the repository + try { + Git.cloneRepository().setURI(remotePath).setDirectory(new File(localPath)).call(); + } catch (Exception ex) { + // If clone fails, try to pull the changes + try { + git.pull().call(); + } catch (Exception exPull) { + // Pull also failed. Throw this exception to caller + throw exPull; // throw it + } + } finally { + git.close(); + } + } catch (Exception ex) { + throw new Exception("Could not download Repository from Github. Error: " + ex.getMessage()); + } + } + + /** + * + * @param localPath + * @param remotePath + * @throws Exception + */ + public static void syncRepository(String localPath, String remotePath) throws Exception { + Repository localRepo; + try { + localRepo = new FileRepository(localPath + "/.git"); + + Git git = new Git(localRepo); + + // Pull the changes + try { + git.pull().call(); + } catch (Exception exPull) { + // If pull failed. Throw this exception to caller + + throw exPull; // throw it + } finally { + git.close(); + } + + } catch (Exception ex) { + throw new Exception("Could not update Repository from Github. Error: " + ex.getMessage()); + } + } + +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/MavenSettings.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/MavenSettings.java new file mode 100644 index 00000000..c0dd5338 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/com/aspose/cells/maven/utils/MavenSettings.java @@ -0,0 +1,88 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 1998-2016 Aspose Pty Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.aspose.cells.maven.utils; + +import org.eclipse.core.runtime.preferences.IEclipsePreferences; +import org.eclipse.core.runtime.preferences.InstanceScope; + +import com.aspose.cells.Activator; + +/** + * + * @author Adeel + */ +public final class MavenSettings { + + private static final String PROP_LAST_ARCHETYPE_GROUPID = "lastArchetypeGroupId"; + private static final String PROP_LAST_ARCHETYPE_VERSION = "lastArchetypeVersion"; + + private IEclipsePreferences getPreferences() { + return InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID); + } + + /** + * + * @return + */ + public String getLastArchetypeGroupId() { + return getPreferences().get(PROP_LAST_ARCHETYPE_GROUPID, "com.mycompany"); + } + + /** + * + * @return + */ + public String getLastArchetypeVersion() { + return getPreferences().get(PROP_LAST_ARCHETYPE_VERSION, "1.0-SNAPSHOT"); + } + + /** + * + * @param version + */ + public void setLastArchetypeVersion(String version) { + putProperty(PROP_LAST_ARCHETYPE_VERSION, version); + } + + /** + * + * @param groupId + */ + public void setLastArchetypeGroupId(String groupId) { + putProperty(PROP_LAST_ARCHETYPE_GROUPID, groupId); + } + + private String putProperty(String key, String value) { + String retval = getProperty(key); + if (value != null) { + getPreferences().put(key, value); + } else { + getPreferences().remove(key); + } + return retval; + } + + private static final MavenSettings INSTANCE = new MavenSettings(); + + /** + * + * @return + */ + public static MavenSettings getDefault() { + return INSTANCE; + } + + private String getProperty(String key) { + return getPreferences().get(key, null); + } + +} diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/org/eclipse/wb/swt/SWTResourceManager.java b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/org/eclipse/wb/swt/SWTResourceManager.java new file mode 100644 index 00000000..8b6d4cc3 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/src/org/eclipse/wb/swt/SWTResourceManager.java @@ -0,0 +1,447 @@ +/******************************************************************************* + * Copyright (c) 2011 Google, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Google, Inc. - initial API and implementation + *******************************************************************************/ +package org.eclipse.wb.swt; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Cursor; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.widgets.Display; + +/** + * Utility class for managing OS resources associated with SWT controls such as colors, fonts, images, etc. + *

+ * !!! IMPORTANT !!! Application code must explicitly invoke the dispose() method to release the + * operating system resources managed by cached objects when those objects and OS resources are no longer + * needed (e.g. on application shutdown) + *

+ * This class may be freely distributed as part of any application or plugin. + *

+ * @author scheglov_ke + * @author Dan Rubel + */ +public class SWTResourceManager { + //////////////////////////////////////////////////////////////////////////// + // + // Color + // + //////////////////////////////////////////////////////////////////////////// + private static Map m_colorMap = new HashMap(); + /** + * Returns the system {@link Color} matching the specific ID. + * + * @param systemColorID + * the ID value for the color + * @return the system {@link Color} matching the specific ID + */ + public static Color getColor(int systemColorID) { + Display display = Display.getCurrent(); + return display.getSystemColor(systemColorID); + } + /** + * Returns a {@link Color} given its red, green and blue component values. + * + * @param r + * the red component of the color + * @param g + * the green component of the color + * @param b + * the blue component of the color + * @return the {@link Color} matching the given red, green and blue component values + */ + public static Color getColor(int r, int g, int b) { + return getColor(new RGB(r, g, b)); + } + /** + * Returns a {@link Color} given its RGB value. + * + * @param rgb + * the {@link RGB} value of the color + * @return the {@link Color} matching the RGB value + */ + public static Color getColor(RGB rgb) { + Color color = m_colorMap.get(rgb); + if (color == null) { + Display display = Display.getCurrent(); + color = new Color(display, rgb); + m_colorMap.put(rgb, color); + } + return color; + } + /** + * Dispose of all the cached {@link Color}'s. + */ + public static void disposeColors() { + for (Color color : m_colorMap.values()) { + color.dispose(); + } + m_colorMap.clear(); + } + //////////////////////////////////////////////////////////////////////////// + // + // Image + // + //////////////////////////////////////////////////////////////////////////// + /** + * Maps image paths to images. + */ + private static Map m_imageMap = new HashMap(); + /** + * Returns an {@link Image} encoded by the specified {@link InputStream}. + * + * @param stream + * the {@link InputStream} encoding the image data + * @return the {@link Image} encoded by the specified input stream + */ + protected static Image getImage(InputStream stream) throws IOException { + try { + Display display = Display.getCurrent(); + ImageData data = new ImageData(stream); + if (data.transparentPixel > 0) { + return new Image(display, data, data.getTransparencyMask()); + } + return new Image(display, data); + } finally { + stream.close(); + } + } + /** + * Returns an {@link Image} stored in the file at the specified path. + * + * @param path + * the path to the image file + * @return the {@link Image} stored in the file at the specified path + */ + public static Image getImage(String path) { + Image image = m_imageMap.get(path); + if (image == null) { + try { + image = getImage(new FileInputStream(path)); + m_imageMap.put(path, image); + } catch (Exception e) { + image = getMissingImage(); + m_imageMap.put(path, image); + } + } + return image; + } + /** + * Returns an {@link Image} stored in the file at the specified path relative to the specified class. + * + * @param clazz + * the {@link Class} relative to which to find the image + * @param path + * the path to the image file, if starts with '/' + * @return the {@link Image} stored in the file at the specified path + */ + public static Image getImage(Class clazz, String path) { + String key = clazz.getName() + '|' + path; + Image image = m_imageMap.get(key); + if (image == null) { + try { + image = getImage(clazz.getResourceAsStream(path)); + m_imageMap.put(key, image); + } catch (Exception e) { + image = getMissingImage(); + m_imageMap.put(key, image); + } + } + return image; + } + private static final int MISSING_IMAGE_SIZE = 10; + /** + * @return the small {@link Image} that can be used as placeholder for missing image. + */ + private static Image getMissingImage() { + Image image = new Image(Display.getCurrent(), MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE); + // + GC gc = new GC(image); + gc.setBackground(getColor(SWT.COLOR_RED)); + gc.fillRectangle(0, 0, MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE); + gc.dispose(); + // + return image; + } + /** + * Style constant for placing decorator image in top left corner of base image. + */ + public static final int TOP_LEFT = 1; + /** + * Style constant for placing decorator image in top right corner of base image. + */ + public static final int TOP_RIGHT = 2; + /** + * Style constant for placing decorator image in bottom left corner of base image. + */ + public static final int BOTTOM_LEFT = 3; + /** + * Style constant for placing decorator image in bottom right corner of base image. + */ + public static final int BOTTOM_RIGHT = 4; + /** + * Internal value. + */ + protected static final int LAST_CORNER_KEY = 5; + /** + * Maps images to decorated images. + */ + @SuppressWarnings("unchecked") + private static Map>[] m_decoratedImageMap = new Map[LAST_CORNER_KEY]; + /** + * Returns an {@link Image} composed of a base image decorated by another image. + * + * @param baseImage + * the base {@link Image} that should be decorated + * @param decorator + * the {@link Image} to decorate the base image + * @return {@link Image} The resulting decorated image + */ + public static Image decorateImage(Image baseImage, Image decorator) { + return decorateImage(baseImage, decorator, BOTTOM_RIGHT); + } + /** + * Returns an {@link Image} composed of a base image decorated by another image. + * + * @param baseImage + * the base {@link Image} that should be decorated + * @param decorator + * the {@link Image} to decorate the base image + * @param corner + * the corner to place decorator image + * @return the resulting decorated {@link Image} + */ + public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) { + if (corner <= 0 || corner >= LAST_CORNER_KEY) { + throw new IllegalArgumentException("Wrong decorate corner"); + } + Map> cornerDecoratedImageMap = m_decoratedImageMap[corner]; + if (cornerDecoratedImageMap == null) { + cornerDecoratedImageMap = new HashMap>(); + m_decoratedImageMap[corner] = cornerDecoratedImageMap; + } + Map decoratedMap = cornerDecoratedImageMap.get(baseImage); + if (decoratedMap == null) { + decoratedMap = new HashMap(); + cornerDecoratedImageMap.put(baseImage, decoratedMap); + } + // + Image result = decoratedMap.get(decorator); + if (result == null) { + Rectangle bib = baseImage.getBounds(); + Rectangle dib = decorator.getBounds(); + // + result = new Image(Display.getCurrent(), bib.width, bib.height); + // + GC gc = new GC(result); + gc.drawImage(baseImage, 0, 0); + if (corner == TOP_LEFT) { + gc.drawImage(decorator, 0, 0); + } else if (corner == TOP_RIGHT) { + gc.drawImage(decorator, bib.width - dib.width, 0); + } else if (corner == BOTTOM_LEFT) { + gc.drawImage(decorator, 0, bib.height - dib.height); + } else if (corner == BOTTOM_RIGHT) { + gc.drawImage(decorator, bib.width - dib.width, bib.height - dib.height); + } + gc.dispose(); + // + decoratedMap.put(decorator, result); + } + return result; + } + /** + * Dispose all of the cached {@link Image}'s. + */ + public static void disposeImages() { + // dispose loaded images + { + for (Image image : m_imageMap.values()) { + image.dispose(); + } + m_imageMap.clear(); + } + // dispose decorated images + for (int i = 0; i < m_decoratedImageMap.length; i++) { + Map> cornerDecoratedImageMap = m_decoratedImageMap[i]; + if (cornerDecoratedImageMap != null) { + for (Map decoratedMap : cornerDecoratedImageMap.values()) { + for (Image image : decoratedMap.values()) { + image.dispose(); + } + decoratedMap.clear(); + } + cornerDecoratedImageMap.clear(); + } + } + } + //////////////////////////////////////////////////////////////////////////// + // + // Font + // + //////////////////////////////////////////////////////////////////////////// + /** + * Maps font names to fonts. + */ + private static Map m_fontMap = new HashMap(); + /** + * Maps fonts to their bold versions. + */ + private static Map m_fontToBoldFontMap = new HashMap(); + /** + * Returns a {@link Font} based on its name, height and style. + * + * @param name + * the name of the font + * @param height + * the height of the font + * @param style + * the style of the font + * @return {@link Font} The font matching the name, height and style + */ + public static Font getFont(String name, int height, int style) { + return getFont(name, height, style, false, false); + } + /** + * Returns a {@link Font} based on its name, height and style. Windows-specific strikeout and underline + * flags are also supported. + * + * @param name + * the name of the font + * @param size + * the size of the font + * @param style + * the style of the font + * @param strikeout + * the strikeout flag (warning: Windows only) + * @param underline + * the underline flag (warning: Windows only) + * @return {@link Font} The font matching the name, height, style, strikeout and underline + */ + public static Font getFont(String name, int size, int style, boolean strikeout, boolean underline) { + String fontName = name + '|' + size + '|' + style + '|' + strikeout + '|' + underline; + Font font = m_fontMap.get(fontName); + if (font == null) { + FontData fontData = new FontData(name, size, style); + if (strikeout || underline) { + try { + Class logFontClass = Class.forName("org.eclipse.swt.internal.win32.LOGFONT"); //$NON-NLS-1$ + Object logFont = FontData.class.getField("data").get(fontData); //$NON-NLS-1$ + if (logFont != null && logFontClass != null) { + if (strikeout) { + logFontClass.getField("lfStrikeOut").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$ + } + if (underline) { + logFontClass.getField("lfUnderline").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$ + } + } + } catch (Throwable e) { + System.err.println("Unable to set underline or strikeout" + " (probably on a non-Windows platform). " + e); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + font = new Font(Display.getCurrent(), fontData); + m_fontMap.put(fontName, font); + } + return font; + } + /** + * Returns a bold version of the given {@link Font}. + * + * @param baseFont + * the {@link Font} for which a bold version is desired + * @return the bold version of the given {@link Font} + */ + public static Font getBoldFont(Font baseFont) { + Font font = m_fontToBoldFontMap.get(baseFont); + if (font == null) { + FontData fontDatas[] = baseFont.getFontData(); + FontData data = fontDatas[0]; + font = new Font(Display.getCurrent(), data.getName(), data.getHeight(), SWT.BOLD); + m_fontToBoldFontMap.put(baseFont, font); + } + return font; + } + /** + * Dispose all of the cached {@link Font}'s. + */ + public static void disposeFonts() { + // clear fonts + for (Font font : m_fontMap.values()) { + font.dispose(); + } + m_fontMap.clear(); + // clear bold fonts + for (Font font : m_fontToBoldFontMap.values()) { + font.dispose(); + } + m_fontToBoldFontMap.clear(); + } + //////////////////////////////////////////////////////////////////////////// + // + // Cursor + // + //////////////////////////////////////////////////////////////////////////// + /** + * Maps IDs to cursors. + */ + private static Map m_idToCursorMap = new HashMap(); + /** + * Returns the system cursor matching the specific ID. + * + * @param id + * int The ID value for the cursor + * @return Cursor The system cursor matching the specific ID + */ + public static Cursor getCursor(int id) { + Integer key = Integer.valueOf(id); + Cursor cursor = m_idToCursorMap.get(key); + if (cursor == null) { + cursor = new Cursor(Display.getDefault(), id); + m_idToCursorMap.put(key, cursor); + } + return cursor; + } + /** + * Dispose all of the cached cursors. + */ + public static void disposeCursors() { + for (Cursor cursor : m_idToCursorMap.values()) { + cursor.dispose(); + } + m_idToCursorMap.clear(); + } + //////////////////////////////////////////////////////////////////////////// + // + // General + // + //////////////////////////////////////////////////////////////////////////// + /** + * Dispose of cached objects and their underlying OS resources. This should only be called when the cached + * objects are no longer needed (e.g. on application shutdown). + */ + public static void dispose() { + disposeColors(); + disposeImages(); + disposeFonts(); + disposeCursors(); + } +} \ No newline at end of file diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseSite/.project b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseSite/.project new file mode 100644 index 00000000..2085d162 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseSite/.project @@ -0,0 +1,17 @@ + + + AsposeCellsEclipseSite + + + + + + org.eclipse.pde.UpdateSiteBuilder + + + + + + org.eclipse.pde.UpdateSiteNature + + diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseSite/site.xml b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseSite/site.xml new file mode 100644 index 00000000..14eb5709 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseSite/site.xml @@ -0,0 +1,14 @@ + + + + Aspose.Cells Maven Project wizard creates Maven Project for using Aspose.Cells for Java API within Eclipse IDE. +"Aspose.Cells for Java is an award-winning Excel Spreadsheet component that allows Java developers to embed the ability to read, write and manipulate Excel® spreadsheets (XLS, XLSX, XLSM, XLSB, XLTX, SpreadsheetML, CSV, ODS), HTML, MHTML, PDF and image file formats into their own Java applications without needing to rely on Microsoft Excel®. +With Aspose.Cells for Java developers can export data, format spreadsheets to the most granular level, import images, create charts, apply and calculate complex formulas, stream Excel® data" +Aspose.Cells Maven Project wizard fetch and configures the latest Maven dependency reference of Aspose.Cells for Java from the Aspose Cloud Maven Repository. +The wizard also gives you option to download the Code Examples to use Aspose.Cells for Java API. + + + + + + diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/LICENSE b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/LICENSE new file mode 100644 index 00000000..f83cc4c8 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2001-2016 Aspose Pty Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/README.md b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/README.md new file mode 100644 index 00000000..9f940ac6 --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/README.md @@ -0,0 +1,41 @@ +## Aspose.Cell Java for Eclipse (Maven) + +The project is **Eclipse IDE plugin** which lets developers to use [Aspose.Cells for Java](http://goo.gl/gtvhlQ) in their Maven based Java projects. + +## Who is supposed to use this **Plugin?** + +The Plugin intended for developers using Maven platform for Java developments and want to use [Aspose.Cells for Java](http://goo.gl/gtvhlQ) in their projects. + +**NOTE:** [Aspose.Cells for Java](http://goo.gl/gtvhlQ) is Java API developed by [Aspose](http://aspose.com) that offers easy Microsoft Excel spreadsheets creation and manipulation right from within Java Projects. For the API detailed features list check the [link](http://goo.gl/gtvhlQ). + +## **Features** + +The plugin provides following features to work with [Aspose.Cells for Java](http://goo.gl/gtvhlQ) API within **Eclipse IDE** comfortably: + +### Aspose.Cells Maven Project (wizard) +![plugin title shot](http://i.imgur.com/DRPRN7Q.png) +* By using this wizard plugin creates Maven project for using [Aspose.Cells for Java](http://goo.gl/gtvhlQ) from **New -> Project -> Maven-> Aspose.Cells Maven Project** +* The wizard will also give option for downloading latest available Code Examples for using the API. + +### Aspose.Cells Code Example (wizard) +![plugin title shot](http://i.imgur.com/LyNvq1r.png) +* By using this wizard plugin lets you copy the downloaded Code Examples into your project for using [Aspose.Cells for Java](http://goo.gl/gtvhlQ) from **New -> Other -> Java -> Aspose.Cells Code Example** +* The wizard will also look for and updates for newly available Code Examples from [Aspose.Cells for Java examples repository.](https://goo.gl/uxznrb) + **NOTE:** Selected Code Examples (category) source codes will be copied under **"com.aspose.cells.examples"** package. Resources needed for running examples will be copied to the corresponding directory (package) within **"src/main/resources"**. + +### Other Features + +* Supports latest **Eclipse Mars.1 (4.5.1)** version +* Compatible with **Mac**, **Linux Flavors** and **Windows** +* Native IDE user experience +* Open Source + +## What is Aspose.Cells Java API? + +**Aspose.Cells for Java** is an award-winning Excel Spreadsheet component that allows Java developers to embed the ability to read, write and manipulate Excel® spreadsheets (XLS, XLSX, XLSM, XLSB, XLTX, SpreadsheetML, CSV, ODS), HTML, MHTML, PDF and image file formats into their own Java applications without needing to rely on Microsoft Excel®. + +For more info about the **Aspose.Cells for Java API**, [please check the api documentation - click here](http://goo.gl/gtvhlQ) + +## Plugin Documentation + +For the most complete documentation, [Please check this WIKI](http://www.aspose.com/docs/display/cellsjava/Aspose.Cells+Java+for+Eclipse+%28Maven%29) diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/Release Notes.html b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/Release Notes.html new file mode 100644 index 00000000..f6f773ee --- /dev/null +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/Release Notes.html @@ -0,0 +1,17 @@ + + + +Aspose.Cells Java for Eclipse (Maven) - Release Notes + + + + +Aspose.Cells Java for Eclipse (Maven) - v1.0.0 +

This is new Plugin for Eclipse IDE by Aspose. The Plugin intended for developers using Maven platform for Java developments and want to use Aspose.Cells for Java in their projects.

+

NOTE: Aspose.Cells for Java is Java API developed by Aspose that offers easy Microsoft Excel spreadsheets creation and manipulation right from within Java Projects. For the API detailed features list check the link. +

The plugin provides following features to work with Aspose.Cells for Java API within Eclipse IDE comfortably: +

  • Aspose.Cells Maven Project
    • By using this wizard plugin creates Maven project for using Aspose.Cells for Java from New -> Project -> Maven-> Aspose.Cells Maven Project
    • The wizard will also give option for downloading latest available Code Examples for using the API.
  • +
  • Aspose.Cells Code Example
  • +
  • Other Features
    • Supports latest Eclipse Mars.1 (4.5.1) version
    • Compatible with Mac, Linux Flavors and Windows
    • Native IDE user experience
    • Open Source
+ + \ No newline at end of file From 9f93807b87b27f929682ef695c08fb3fdb6cd60b Mon Sep 17 00:00:00 2001 From: ali_salman Date: Tue, 8 Mar 2016 17:45:51 +0500 Subject: [PATCH 2/2] updated long banner png --- .../AsposeCellsEclipseFeature/feature.xml | 4 ++-- .../resources/long_banner.png | Bin 64954 -> 44620 bytes .../maven/AsposeMavenProjectWizardPage.java | 20 +++++++++--------- .../examples/AsposeExampleWizardPage.java | 8 +++---- .../AsposeCellsEclipseSite/site.xml | 2 +- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/feature.xml b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/feature.xml index d97ac302..0203b4f7 100644 --- a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/feature.xml +++ b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipseFeature/feature.xml @@ -2,7 +2,7 @@ @@ -46,7 +46,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRES id="com.aspose.cells.java.maven.plugin" download-size="0" install-size="0" - version="1.0.0.0" + version="1.0.0.1" unpack="false"/> diff --git a/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/long_banner.png b/Plugins/Aspose-Cells-Java-for-Eclipse(Maven)/AsposeCellsEclipsePlugin/resources/long_banner.png index b95465ea51842cc4caa4435ad72a9e2379ddc938..c62fa705a2930a3d555f3df6b524dd6f35ff88ad 100644 GIT binary patch literal 44620 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 - +