You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2013/09/04 12:21:26 UTC
svn commit: r1519969 - in /sling/trunk/tooling/ide/eclipse-ui:
META-INF/MANIFEST.MF pom.xml
src/org/apache/sling/ide/eclipse/ui/wizards/np/SetupServerWizardPage.java
Author: stefanegli
Date: Wed Sep 4 10:21:26 2013
New Revision: 1519969
URL: http://svn.apache.org/r1519969
Log:
SLING-3009 : embed the org.apache.sling.tooling.support.install bundle with slingclipse and install the bundle (if the user chooses to) as part of the new-app/project-wizard
Modified:
sling/trunk/tooling/ide/eclipse-ui/META-INF/MANIFEST.MF
sling/trunk/tooling/ide/eclipse-ui/pom.xml
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/SetupServerWizardPage.java
Modified: sling/trunk/tooling/ide/eclipse-ui/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/META-INF/MANIFEST.MF?rev=1519969&r1=1519968&r2=1519969&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/META-INF/MANIFEST.MF (original)
+++ sling/trunk/tooling/ide/eclipse-ui/META-INF/MANIFEST.MF Wed Sep 4 10:21:26 2013
@@ -6,7 +6,12 @@ Bundle-Activator: org.apache.sling.ide.e
Bundle-Version: 0.0.1.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ClassPath: .
-Import-Package: org.apache.maven.artifact.repository,
+Import-Package: org.apache.commons.httpclient;version="3.1.0",
+ org.apache.commons.httpclient.auth;version="3.1.0",
+ org.apache.commons.httpclient.methods;version="3.1.0",
+ org.apache.commons.httpclient.methods.multipart;version="3.1.0",
+ org.apache.commons.httpclient.params;version="3.1.0",
+ org.apache.maven.artifact.repository,
org.apache.maven.model,
org.apache.sling.ide.eclipse.core,
org.apache.sling.ide.filter,
Modified: sling/trunk/tooling/ide/eclipse-ui/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/pom.xml?rev=1519969&r1=1519968&r2=1519969&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/pom.xml (original)
+++ sling/trunk/tooling/ide/eclipse-ui/pom.xml Wed Sep 4 10:21:26 2013
@@ -10,4 +10,42 @@
<artifactId>org.apache.sling.ide.eclipse-ui</artifactId>
<packaging>eclipse-plugin</packaging>
<name>Sling IDE Tools: Eclipse UI</name>
-</project>
+<build>
+ <resources>
+ <resource>
+ <directory>src/main/java</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.8</version>
+ <executions>
+ <execution>
+ <id>copy</id>
+ <phase>package</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.tooling.support.install</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <overWrite>false</overWrite>
+ <outputDirectory>${project.build.directory}/sling-tooling-support-install</outputDirectory>
+ </artifactItem>
+ </artifactItems>
+ <overWriteReleases>false</overWriteReleases>
+ <overWriteSnapshots>true</overWriteSnapshots>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build></project>
Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/SetupServerWizardPage.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/SetupServerWizardPage.java?rev=1519969&r1=1519968&r2=1519969&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/SetupServerWizardPage.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/wizards/np/SetupServerWizardPage.java Wed Sep 4 10:21:26 2013
@@ -16,12 +16,34 @@
*/
package org.apache.sling.ide.eclipse.ui.wizards.np;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import org.apache.commons.httpclient.Credentials;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource;
+import org.apache.commons.httpclient.methods.multipart.FilePart;
+import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
+import org.apache.commons.httpclient.methods.multipart.Part;
+import org.apache.commons.httpclient.methods.multipart.PartSource;
+import org.apache.commons.httpclient.methods.multipart.StringPart;
import org.apache.sling.ide.eclipse.core.ISlingLaunchpadServer;
+import org.apache.sling.ide.eclipse.ui.internal.Activator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
@@ -53,6 +75,7 @@ public class SetupServerWizardPage exten
private Text newServerHostnameName;
private Text newServerPort;
private Text newServerDebugPort;
+ private Button installToolingSupportBundle;
private Map<String, IServer> serversMap = new HashMap<String, IServer>();
@@ -163,6 +186,15 @@ public class SetupServerWizardPage exten
newServerDebugPort.setLayoutData(newServerDebugPortData);
}
+ {
+ installToolingSupportBundle = new Button(container, SWT.CHECK);
+ GridData installToolingSupportBundleData = new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1);
+ installToolingSupportBundleData.horizontalIndent = 10;
+ installToolingSupportBundle.setLayoutData(installToolingSupportBundleData);
+ installToolingSupportBundle.setText("Check/Install org.apache.sling.tooling.support.install bundle");
+ installToolingSupportBundle.setSelection(true);
+ }
+
SelectionAdapter radioListener = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
@@ -171,6 +203,7 @@ public class SetupServerWizardPage exten
newServerHostnameName.setEnabled(setupNewServer.getSelection());
newServerPort.setEnabled(setupNewServer.getSelection());
newServerDebugPort.setEnabled(setupNewServer.getSelection());
+ installToolingSupportBundle.setEnabled(setupNewServer.getSelection());
dialogChanged();
}
};
@@ -178,6 +211,7 @@ public class SetupServerWizardPage exten
setupNewServer.addSelectionListener(radioListener);
useExistingServer.setSelection(true);
setupNewServer.setSelection(false);
+ installToolingSupportBundle.setSelection(false);
ModifyListener ml = new ModifyListener() {
@@ -234,7 +268,7 @@ public class SetupServerWizardPage exten
}
} else if (setupNewServer.getSelection()) {
if (newServerName.getText().length()==0 ||
- newServerHostnameName.getText().length()==0 ||
+ getHostname().length()==0 ||
newServerPort.getText().length()==0 ||
newServerDebugPort.getText().length()==0) {
updateStatus("Enter values for new server");
@@ -249,6 +283,90 @@ public class SetupServerWizardPage exten
setPageComplete(message == null);
}
+
+ private boolean containsToolingSupportBundle() {
+ String hostname = getHostname();
+ int launchpadPort = getPort();
+ GetMethod method = new GetMethod("http://"+hostname+":"+launchpadPort+"/system/console/bundles/org.apache.sling.tooling.support.install");
+
+ try {
+ return getHttpClient("admin", "admin").executeMethod(method) == 200;
+ } catch (IOException e) {
+ // TODO proper logging
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
+ * Get the http client
+ * @param user
+ * @param password
+ */
+ protected HttpClient getHttpClient(String user, String password) {
+ final HttpClient client = new HttpClient();
+ client.getHttpConnectionManager().getParams().setConnectionTimeout(
+ 5000);
+
+ // authentication stuff
+ client.getParams().setAuthenticationPreemptive(true);
+ Credentials defaultcreds = new UsernamePasswordCredentials(user,
+ password);
+ client.getState().setCredentials(AuthScope.ANY, defaultcreds);
+
+ return client;
+ }
+
+ protected int post(String targetURL, String user, String passwd, InputStream in, String fileName) throws IOException {
+ // append pseudo path after root URL to not get redirected for nothing
+ final PostMethod filePost = new PostMethod(targetURL + "/install");
+
+ try {
+ // set referrer
+ filePost.setRequestHeader("referer", "about:blank");
+
+ List<Part> partList = new ArrayList<Part>();
+ partList.add(new StringPart("action", "install"));
+ partList.add(new StringPart("_noredir_", "_noredir_"));
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ copyStream(in, baos);
+ PartSource partSource = new ByteArrayPartSource(fileName, baos.toByteArray());
+ partList.add(new FilePart("bundlefile", partSource));
+ partList.add(new StringPart("bundlestart", "start"));
+
+ Part[] parts = partList.toArray(new Part[partList.size()]);
+
+ filePost.setRequestEntity(new MultipartRequestEntity(parts,
+ filePost.getParams()));
+
+ int status = getHttpClient(user, passwd).executeMethod(filePost);
+ return status;
+ } finally {
+ filePost.releaseConnection();
+ }
+ }
+
+ private void copyStream(InputStream in, OutputStream os) throws IOException {
+ final byte[] bytes = new byte[4*1024];
+ while (true) {
+ final int numRead = in.read(bytes);
+ if (numRead < 0) {
+ break;
+ }
+ os.write(bytes, 0, numRead);
+ }
+ }
+
+ private int installToolingSupportBundle() throws IOException {
+ String hostname = getHostname();
+ int launchpadPort = getPort();
+ String targetURL = "http://"+hostname+":"+launchpadPort+"/system/console";
+ String fileName = "org.apache.sling.tooling.support.install-0.0.1-SNAPSHOT.jar";
+ URL jarUrl = Activator.getDefault().getBundle().getResource(
+ "target/sling-tooling-support-install/"+fileName);
+ return post(targetURL, "admin", "admin", jarUrl.openStream(), fileName);
+ }
+
IServer getOrCreateServer() {
if (useExistingServer.getSelection()) {
String key = existingServerCombo.getItem(existingServerCombo.getSelectionIndex());
@@ -264,14 +382,32 @@ public class SetupServerWizardPage exten
existingRuntime = aRuntime;
}
}
+
+ if (installToolingSupportBundle.getSelection() && !containsToolingSupportBundle()) {
+ // then auto-install it if possible
+ try {
+ int status = installToolingSupportBundle();
+
+ if (status!=HttpStatus.SC_OK) {
+ MessageDialog.openError(getShell(), "Could not install sling tooling support bundle",
+ "Could not install sling tooling support bundle: "+status);
+ }
+ } catch (IOException e) {
+ //TODO proper logging
+ e.printStackTrace();
+ MessageDialog.openError(getShell(), "Could not install sling tooling support bundle",
+ "Could not install sling tooling support bundle: "+e.getMessage());
+ }
+ }
+
IRuntimeType serverRuntime = ServerCore.findRuntimeType("org.apache.sling.ide.launchpadRuntimeType");
try {
IRuntime runtime = serverRuntime.createRuntime(null, new NullProgressMonitor());
runtime = runtime.createWorkingCopy().save(true, new NullProgressMonitor());
IServerWorkingCopy wc = serverType.createServer(null, null, runtime, new NullProgressMonitor());
- wc.setHost(newServerHostnameName.getText());
+ wc.setHost(getHostname());
wc.setName(newServerName.getText() + " (external)");
- wc.setAttribute(ISlingLaunchpadServer.PROP_PORT, Integer.parseInt(newServerPort.getText()));
+ wc.setAttribute(ISlingLaunchpadServer.PROP_PORT, getPort());
wc.setAttribute(ISlingLaunchpadServer.PROP_DEBUG_PORT, Integer.parseInt(newServerDebugPort.getText()));
wc.setAttribute("auto-publish-setting", 2); // 2: automatically publish when resources change
wc.setAttribute("auto-publish-time", 0); // 0: zero delay after a resource change (and the builder was kicked, I guess)
@@ -285,4 +421,12 @@ public class SetupServerWizardPage exten
}
}
+ private int getPort() {
+ return Integer.parseInt(newServerPort.getText());
+ }
+
+ private String getHostname() {
+ return newServerHostnameName.getText();
+ }
+
}
\ No newline at end of file