aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerPage.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerPage.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerPage.java200
1 files changed, 200 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerPage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerPage.java
new file mode 100644
index 000000000..b02765012
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerPage.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php
+ *
+ * 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 com.android.ide.eclipse.adt.internal.project;
+
+import com.android.ide.eclipse.adt.AdtConstants;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
+import org.eclipse.jdt.internal.ui.dialogs.StatusUtil;
+import org.eclipse.jdt.ui.wizards.IClasspathContainerPage;
+import org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import java.util.Arrays;
+
+public class AndroidClasspathContainerPage extends WizardPage implements IClasspathContainerPage,
+ IClasspathContainerPageExtension {
+
+ private IProject mOwnerProject;
+
+ private String mLibsProjectName;
+
+ private Combo mProjectsCombo;
+
+ private IStatus mCurrStatus;
+
+ private boolean mPageVisible;
+
+ public AndroidClasspathContainerPage() {
+ super("AndroidClasspathContainerPage"); //$NON-NLS-1$
+ mPageVisible = false;
+ mCurrStatus = new StatusInfo();
+ setTitle("Android Libraries");
+ setDescription("This container manages classpath entries for Android container");
+ }
+
+ @Override
+ public IClasspathEntry getSelection() {
+ IPath path = new Path(AdtConstants.CONTAINER_FRAMEWORK);
+
+ final int index = this.mProjectsCombo.getSelectionIndex();
+ if (index != -1) {
+ final String selectedProjectName = this.mProjectsCombo.getItem(index);
+
+ if (this.mOwnerProject == null
+ || !selectedProjectName.equals(this.mOwnerProject.getName())) {
+ path = path.append(selectedProjectName);
+ }
+ }
+
+ return JavaCore.newContainerEntry(path);
+ }
+
+ @Override
+ public void setSelection(final IClasspathEntry cpentry) {
+ final IPath path = cpentry == null ? null : cpentry.getPath();
+
+ if (path == null || path.segmentCount() == 1) {
+ if (this.mOwnerProject != null) {
+ this.mLibsProjectName = this.mOwnerProject.getName();
+ }
+ } else {
+ this.mLibsProjectName = path.segment(1);
+ }
+ }
+
+ @Override
+ public void createControl(final Composite parent) {
+ final Composite composite = new Composite(parent, SWT.NONE);
+ composite.setLayout(new GridLayout(2, false));
+
+ final Label label = new Label(composite, SWT.NONE);
+ label.setText("Project:");
+
+ final String[] androidProjects = getAndroidProjects();
+
+ this.mProjectsCombo = new Combo(composite, SWT.READ_ONLY);
+ this.mProjectsCombo.setItems(androidProjects);
+
+ final int index;
+
+ if (this.mOwnerProject != null) {
+ index = indexOf(androidProjects, this.mLibsProjectName);
+ } else {
+ if (this.mProjectsCombo.getItemCount() > 0) {
+ index = 0;
+ } else {
+ index = -1;
+ }
+ }
+
+ if (index != -1) {
+ this.mProjectsCombo.select(index);
+ }
+
+ final GridData gd = new GridData();
+ gd.grabExcessHorizontalSpace = true;
+ gd.minimumWidth = 100;
+
+ this.mProjectsCombo.setLayoutData(gd);
+
+ setControl(composite);
+ }
+
+ @Override
+ public boolean finish() {
+ return true;
+ }
+
+ @Override
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ mPageVisible = visible;
+ // policy: wizards are not allowed to come up with an error message
+ if (visible && mCurrStatus.matches(IStatus.ERROR)) {
+ StatusInfo status = new StatusInfo();
+ status.setError(""); //$NON-NLS-1$
+ mCurrStatus = status;
+ }
+ updateStatus(mCurrStatus);
+ }
+
+ /**
+ * Updates the status line and the OK button according to the given status
+ *
+ * @param status status to apply
+ */
+ protected void updateStatus(IStatus status) {
+ mCurrStatus = status;
+ setPageComplete(!status.matches(IStatus.ERROR));
+ if (mPageVisible) {
+ StatusUtil.applyToStatusLine(this, status);
+ }
+ }
+
+ /**
+ * Updates the status line and the OK button according to the status
+ * evaluate from an array of status. The most severe error is taken. In case
+ * that two status with the same severity exists, the status with lower
+ * index is taken.
+ *
+ * @param status the array of status
+ */
+ protected void updateStatus(IStatus[] status) {
+ updateStatus(StatusUtil.getMostSevere(status));
+ }
+
+ @Override
+ public void initialize(final IJavaProject project, final IClasspathEntry[] currentEntries) {
+ this.mOwnerProject = (project == null ? null : project.getProject());
+ }
+
+ private static String[] getAndroidProjects() {
+ IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+ final String[] names = new String[projects.length];
+ for (int i = 0; i < projects.length; i++) {
+ names[i] = projects[i].getName();
+ }
+ Arrays.sort(names);
+ return names;
+ }
+
+ private static int indexOf(final String[] array, final String str) {
+ for (int i = 0; i < array.length; i++) {
+ if (array[i].equals(str)) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+}