You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by as...@apache.org on 2012/10/30 15:35:46 UTC
svn commit: r1403719 - in
/sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin: ./ META-INF/
src/org/apache/sling/slingclipse/ui/
src/org/apache/sling/slingclipse/ui/wizards/
Author: asanso
Date: Tue Oct 30 14:35:46 2012
New Revision: 1403719
URL: http://svn.apache.org/viewvc?rev=1403719&view=rev
Log:
SLING-2636 - [Tooling] Add ability to Import from Sling Repository. Applying patch from Dan Kico!
Added:
sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/
sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/wizards/
sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/wizards/ImportWizard.java
sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/wizards/ImportWizardPage.java
Modified:
sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/META-INF/MANIFEST.MF
sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/plugin.xml
Modified: sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/META-INF/MANIFEST.MF?rev=1403719&r1=1403718&r2=1403719&view=diff
==============================================================================
--- sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/META-INF/MANIFEST.MF (original)
+++ sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/META-INF/MANIFEST.MF Tue Oct 30 14:35:46 2012
@@ -10,7 +10,8 @@ Require-Bundle: org.eclipse.ui,
org.apache.commons.httpclient;bundle-version="3.1.0",
org.apache.sling.slingclipse.api;bundle-version="0.0.1",
org.eclipse.equinox.ds;bundle-version="1.2.1",
- org.eclipse.osgi.services;bundle-version="3.2.100"
+ org.eclipse.osgi.services;bundle-version="3.2.100",
+ org.eclipse.ui.ide
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ClassPath: .
Modified: sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/plugin.xml
URL: http://svn.apache.org/viewvc/sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/plugin.xml?rev=1403719&r1=1403718&r2=1403719&view=diff
==============================================================================
--- sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/plugin.xml (original)
+++ sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/plugin.xml Tue Oct 30 14:35:46 2012
@@ -24,5 +24,22 @@
class="org.apache.sling.slingclipse.SlingclipseStrartup">
</startup>
</extension>
+ <extension
+ point="org.eclipse.ui.importWizards">
+ <category
+ id="org.apache.sling.slingclipse.ui.wizards.sampleCategory"
+ name="Sling">
+ </category>
+ <wizard
+ category="org.apache.sling.slingclipse.ui.wizards.sampleCategory"
+ class="org.apache.sling.slingclipse.ui.wizards.ImportWizard"
+ icon="icons/sample.gif"
+ id="org.apache.sling.slingclipse.ui.wizards.ImportWizard"
+ name="Import from Repository">
+ <description>
+ Import a file from the local file system into the workspace.
+ </description>
+ </wizard>
+ </extension>
</plugin>
Added: sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/wizards/ImportWizard.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/wizards/ImportWizard.java?rev=1403719&view=auto
==============================================================================
--- sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/wizards/ImportWizard.java (added)
+++ sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/wizards/ImportWizard.java Tue Oct 30 14:35:46 2012
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.slingclipse.ui.wizards;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+/**
+ * Renders the import wizard container page for the Slingclipse repository
+ * import.
+ */
+public class ImportWizard extends Wizard implements IImportWizard {
+ private ImportWizardPage mainPage;
+
+ /**
+ * Construct a new Import Wizard container instance.
+ */
+ public ImportWizard() {
+ super();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.Wizard#performFinish()
+ */
+ public boolean performFinish() {
+ if (mainPage.isPageComplete()) {
+ Job job = new Job("Import") {
+
+ protected IStatus run(IProgressMonitor monitor) {
+ monitor.setTaskName("Starting import...");
+ monitor.worked(10);
+ // TODO: Actually run the job here
+ try {
+ long numMillisecondsToSleep = 5000; // 5 seconds
+ Thread.sleep(numMillisecondsToSleep);
+ } catch (InterruptedException e) {
+ }
+ return Status.OK_STATUS;
+ }
+ };
+ job.addJobChangeListener(new JobChangeAdapter() {
+ public void done(IJobChangeEvent event) {
+ if (event.getResult().isOK()) {
+ System.out.println("Job Succeeded!");
+ } else {
+ System.err.println("Job Failed!");
+ }
+ }
+ });
+ job.setSystem(false);
+ job.setUser(true);
+ job.schedule();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench,
+ * org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ setWindowTitle("Repositoy Import"); // NON-NLS-1
+ setNeedsProgressMonitor(true);
+ mainPage = new ImportWizardPage("Import from Repository", selection); // NON-NLS-1
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.wizard.IWizard#addPages()
+ */
+ public void addPages() {
+ super.addPages();
+ addPage(mainPage);
+ }
+
+}
Added: sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/wizards/ImportWizardPage.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/wizards/ImportWizardPage.java?rev=1403719&view=auto
==============================================================================
--- sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/wizards/ImportWizardPage.java (added)
+++ sling/whiteboard/asanso/plugins/eclipse/slingclipse-plugin/src/org/apache/sling/slingclipse/ui/wizards/ImportWizardPage.java Tue Oct 30 14:35:46 2012
@@ -0,0 +1,268 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.slingclipse.ui.wizards;
+
+import org.apache.sling.slingclipse.SlingclipsePlugin;
+import org.apache.sling.slingclipse.helper.SlingclipseHelper;
+import org.apache.sling.slingclipse.preferences.PreferencesMessages;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.WizardResourceImportPage;
+
+/**
+ * Wizard page for importing content from Sling Repositories.
+ */
+public class ImportWizardPage extends WizardResourceImportPage {
+
+ private IStructuredSelection selection;
+ private Text password;
+ private Text user;
+ private Text repo;
+ private Text path;
+ private ModifyListener modifyListener = new ModifyListener() {
+ @Override
+ public void modifyText(ModifyEvent event) {
+ try{
+ determinePageCompletion();
+ updateWidgetEnablements();
+ }catch(Exception e){
+ //TODO: Log or just ignore?
+ }
+ }
+ };
+
+ /**
+ * Creates an import wizard page for importing from a Sling Repository. If
+ * the initial resource selection contains exactly one container resource
+ * then it will be used as the default import destination. Multiple
+ * selections are not supported, but are not disallowed.
+ *
+ * @param pageName
+ * the name of the page
+ * @param selection
+ * the current resource selection
+ */
+ public ImportWizardPage(String pageName, IStructuredSelection selection) {
+ super(pageName, selection);
+ this.selection = selection;
+ setTitle(pageName); // NON-NLS-1
+ setDescription("Import content from a Sling Repository into the workspace"); // NON-NLS-1
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.dialogs.WizardResourceImportPage#allowNewContainerName()
+ */
+ @Override
+ protected boolean allowNewContainerName() {
+ return false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.dialogs.WizardDataTransferPage#createOptionsGroup(org.
+ * eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected void createOptionsGroup(Composite parent) {
+ Group optionsGroup = new Group(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ optionsGroup.setLayout(layout);
+ optionsGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ optionsGroup.setText("Options");
+ optionsGroup.setFont(parent.getFont());
+
+ Composite container = new Composite(optionsGroup, SWT.NONE);
+ container.setLayout(new GridLayout(2, false));
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
+ gridData.minimumWidth = 450;
+ container.setLayoutData(gridData);
+
+ IPreferenceStore store = SlingclipsePlugin.getDefault()
+ .getPreferenceStore();
+
+ Label repoLabel = new Label(container, SWT.NONE);
+ repoLabel.setText("Repository URL:");
+ repo = new Text(container, SWT.BORDER);
+ repo.setText(store.getString(PreferencesMessages.REPOSITORY_URL
+ .getKey()));
+ repo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ repo.addModifyListener(modifyListener);
+
+ Label userLabel = new Label(container, SWT.NONE);
+ userLabel.setText("Username:");
+ user = new Text(container, SWT.BORDER);
+ user.setText(store.getString(PreferencesMessages.USERNAME.getKey()));
+ user.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ user.addModifyListener(modifyListener);
+
+ Label passwordLabel = new Label(container, SWT.NONE);
+ passwordLabel.setText("Password:");
+ password = new Text(container, SWT.BORDER);
+ password.setText(store.getString(PreferencesMessages.PASSWORD.getKey()));
+ password.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ password.addModifyListener(modifyListener);
+
+ createOptionsGroupButtons(optionsGroup);
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.dialogs.WizardResourceImportPage#createSourceGroup(org
+ * .eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected void createSourceGroup(Composite parent) {
+
+ // TODO: Currently only supports first selection
+ IResource resource = ((IResource) selection.getFirstElement());
+ String pathStr = resource.getFullPath().toPortableString();
+
+ Composite container = new Composite(parent, SWT.NONE);
+ container.setLayout(new GridLayout(2, false));
+ GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
+ gridData.minimumWidth = 450;
+ container.setLayoutData(gridData);
+
+ Label pathLabel = new Label(container, SWT.NONE);
+ pathLabel.setText("Repository Path:");
+ path = new Text(container, SWT.BORDER);
+ path.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ path.addModifyListener(modifyListener);
+
+
+ if (SlingclipseHelper.isValidSlingProjectPath(pathStr)) {
+ path.setText(SlingclipseHelper.getSlingProjectPath(pathStr));
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.WizardResourceImportPage#getFileProvider()
+ */
+ @Override
+ protected ITreeContentProvider getFileProvider() {
+ // TODO Not sure if I need to return anything here...
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.WizardResourceImportPage#getFolderProvider()
+ */
+ @Override
+ protected ITreeContentProvider getFolderProvider() {
+ // TODO Not sure if I need to return anything here...
+ return null;
+ }
+
+ /**
+ * Get the password with which to connect to the Sling Repository.
+ *
+ * @return the username
+ */
+ public String getPassword() {
+ return password != null ? password.getText() : null;
+ }
+
+ /**
+ * Returns the Sling Repository URL to connect to.
+ *
+ * @return the Sling Repository URL
+ */
+ public String getRepositoryUrl() {
+ return repo != null ? repo.getText() : null;
+ }
+
+ /**
+ * Returns the path from which to import from the Sling Repository.
+ *
+ * @return the repository path
+ */
+ public String getRepositoryPath() {
+ return path != null ? path.getText() : null;
+ }
+
+ /**
+ * Get the username with which to connect to the Sling Repository.
+ *
+ * @return the username
+ */
+ public String getUsername() {
+ return user != null ? user.getText() : null;
+ }
+
+ public void handleEvent(Event event) {
+ super.handleEvent(event);
+ determinePageCompletion();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.WizardDataTransferPage#validateOptionsGroup()
+ */
+ @Override
+ protected boolean validateOptionsGroup() {
+ if (this.getRepositoryUrl() == null
+ || this.getRepositoryUrl().trim().length() == 0
+ || this.getUsername() == null
+ || this.getUsername().trim().length() == 0
+ || this.getPassword() == null
+ || this.getPassword().trim().length() == 0) {
+ setErrorMessage("Please enter valid server information");
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.dialogs.WizardDataTransferPage#validateSourceGroup()
+ */
+ @Override
+ protected boolean validateSourceGroup() {
+ if (getRepositoryPath() == null
+ || getRepositoryPath().trim().length() == 0) {
+ setErrorMessage("Please enter a valid Sling Repository path");
+ return false;
+ }
+ return true;
+ }
+}