aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/ClientRulesEngine.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/ClientRulesEngine.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/ClientRulesEngine.java762
1 files changed, 0 insertions, 762 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/ClientRulesEngine.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/ClientRulesEngine.java
deleted file mode 100644
index 388907a46..000000000
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gre/ClientRulesEngine.java
+++ /dev/null
@@ -1,762 +0,0 @@
-/*
- * Copyright (C) 2011 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.editors.layout.gre;
-
-import static com.android.SdkConstants.ANDROID_URI;
-import static com.android.SdkConstants.ATTR_ID;
-import static com.android.SdkConstants.AUTO_URI;
-import static com.android.SdkConstants.CLASS_FRAGMENT;
-import static com.android.SdkConstants.CLASS_V4_FRAGMENT;
-import static com.android.SdkConstants.CLASS_VIEW;
-import static com.android.SdkConstants.NEW_ID_PREFIX;
-import static com.android.SdkConstants.URI_PREFIX;
-
-import com.android.annotations.NonNull;
-import com.android.annotations.Nullable;
-import com.android.ide.common.api.IClientRulesEngine;
-import com.android.ide.common.api.INode;
-import com.android.ide.common.api.IValidator;
-import com.android.ide.common.api.IViewMetadata;
-import com.android.ide.common.api.IViewRule;
-import com.android.ide.common.api.Margins;
-import com.android.ide.common.api.Rect;
-import com.android.ide.common.layout.BaseViewRule;
-import com.android.ide.common.resources.ResourceRepository;
-import com.android.ide.eclipse.adt.AdtPlugin;
-import com.android.ide.eclipse.adt.internal.actions.AddSupportJarAction;
-import com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor;
-import com.android.ide.eclipse.adt.internal.editors.descriptors.DescriptorsUtils;
-import com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate;
-import com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationChooser;
-import com.android.ide.eclipse.adt.internal.editors.layout.gle2.CanvasViewInfo;
-import com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart;
-import com.android.ide.eclipse.adt.internal.editors.layout.gle2.LayoutCanvas;
-import com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService;
-import com.android.ide.eclipse.adt.internal.editors.layout.gle2.SelectionManager;
-import com.android.ide.eclipse.adt.internal.editors.layout.gle2.ViewHierarchy;
-import com.android.ide.eclipse.adt.internal.editors.manifest.ManifestInfo;
-import com.android.ide.eclipse.adt.internal.editors.uimodel.UiDocumentNode;
-import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper;
-import com.android.ide.eclipse.adt.internal.refactorings.core.RenameResult;
-import com.android.ide.eclipse.adt.internal.resources.CyclicDependencyValidator;
-import com.android.ide.eclipse.adt.internal.resources.ResourceNameValidator;
-import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager;
-import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData;
-import com.android.ide.eclipse.adt.internal.sdk.ProjectState;
-import com.android.ide.eclipse.adt.internal.sdk.Sdk;
-import com.android.ide.eclipse.adt.internal.ui.MarginChooser;
-import com.android.ide.eclipse.adt.internal.ui.ReferenceChooserDialog;
-import com.android.ide.eclipse.adt.internal.ui.ResourceChooser;
-import com.android.ide.eclipse.adt.internal.ui.ResourcePreviewHelper;
-import com.android.resources.ResourceType;
-import com.android.sdklib.IAndroidTarget;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jdt.core.Flags;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.ITypeHierarchy;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-import org.eclipse.jdt.core.search.SearchEngine;
-import org.eclipse.jdt.ui.IJavaElementSearchConstants;
-import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.actions.OpenNewClassWizardAction;
-import org.eclipse.jdt.ui.dialogs.ITypeInfoFilterExtension;
-import org.eclipse.jdt.ui.dialogs.ITypeInfoRequestor;
-import org.eclipse.jdt.ui.dialogs.TypeSelectionExtension;
-import org.eclipse.jdt.ui.wizards.NewClassWizardPage;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.dialogs.SelectionDialog;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicReference;
-
-/**
- * Implementation of {@link IClientRulesEngine}. This provides {@link IViewRule} clients
- * with a few methods they can use to access functionality from this {@link RulesEngine}.
- */
-class ClientRulesEngine implements IClientRulesEngine {
- /** The return code from the dialog for the user choosing "Clear" */
- public static final int CLEAR_RETURN_CODE = -5;
- /** The dialog button ID for the user choosing "Clear" */
- private static final int CLEAR_BUTTON_ID = CLEAR_RETURN_CODE;
-
- private final RulesEngine mRulesEngine;
- private final String mFqcn;
-
- public ClientRulesEngine(RulesEngine rulesEngine, String fqcn) {
- mRulesEngine = rulesEngine;
- mFqcn = fqcn;
- }
-
- @Override
- public @NonNull String getFqcn() {
- return mFqcn;
- }
-
- @Override
- public void debugPrintf(@NonNull String msg, Object... params) {
- AdtPlugin.printToConsole(
- mFqcn == null ? "<unknown>" : mFqcn,
- String.format(msg, params)
- );
- }
-
- @Override
- public IViewRule loadRule(@NonNull String fqcn) {
- return mRulesEngine.loadRule(fqcn, fqcn);
- }
-
- @Override
- public void displayAlert(@NonNull String message) {
- MessageDialog.openInformation(
- AdtPlugin.getShell(),
- mFqcn, // title
- message);
- }
-
- @Override
- public boolean rename(INode node) {
- GraphicalEditorPart editor = mRulesEngine.getEditor();
- SelectionManager manager = editor.getCanvasControl().getSelectionManager();
- RenameResult result = manager.performRename(node, null);
-
- return !result.isCanceled() && !result.isUnavailable();
- }
-
- @Override
- public String displayInput(@NonNull String message, @Nullable String value,
- final @Nullable IValidator filter) {
- IInputValidator validator = null;
- if (filter != null) {
- validator = new IInputValidator() {
- @Override
- public String isValid(String newText) {
- // IValidator has the same interface as SWT's IInputValidator
- try {
- return filter.validate(newText);
- } catch (Exception e) {
- AdtPlugin.log(e, "Custom validator failed: %s", e.toString());
- return ""; //$NON-NLS-1$
- }
- }
- };
- }
-
- InputDialog d = new InputDialog(
- AdtPlugin.getShell(),
- mFqcn, // title
- message,
- value == null ? "" : value, //$NON-NLS-1$
- validator) {
- @Override
- protected void createButtonsForButtonBar(Composite parent) {
- createButton(parent, CLEAR_BUTTON_ID, "Clear", false /*defaultButton*/);
- super.createButtonsForButtonBar(parent);
- }
-
- @Override
- protected void buttonPressed(int buttonId) {
- super.buttonPressed(buttonId);
-
- if (buttonId == CLEAR_BUTTON_ID) {
- assert CLEAR_RETURN_CODE != Window.OK && CLEAR_RETURN_CODE != Window.CANCEL;
- setReturnCode(CLEAR_RETURN_CODE);
- close();
- }
- }
- };
- int result = d.open();
- if (result == ResourceChooser.CLEAR_RETURN_CODE) {
- return "";
- } else if (result == Window.OK) {
- return d.getValue();
- }
- return null;
- }
-
- @Override
- @Nullable
- public Object getViewObject(@NonNull INode node) {
- ViewHierarchy views = mRulesEngine.getEditor().getCanvasControl().getViewHierarchy();
- CanvasViewInfo vi = views.findViewInfoFor(node);
- if (vi != null) {
- return vi.getViewObject();
- }
-
- return null;
- }
-
- @Override
- public @NonNull IViewMetadata getMetadata(final @NonNull String fqcn) {
- return new IViewMetadata() {
- @Override
- public @NonNull String getDisplayName() {
- // This also works when there is no "."
- return fqcn.substring(fqcn.lastIndexOf('.') + 1);
- }
-
- @Override
- public @NonNull FillPreference getFillPreference() {
- return ViewMetadataRepository.get().getFillPreference(fqcn);
- }
-
- @Override
- public @NonNull Margins getInsets() {
- return mRulesEngine.getEditor().getCanvasControl().getInsets(fqcn);
- }
-
- @Override
- public @NonNull List<String> getTopAttributes() {
- return ViewMetadataRepository.get().getTopAttributes(fqcn);
- }
- };
- }
-
- @Override
- public int getMinApiLevel() {
- Sdk currentSdk = Sdk.getCurrent();
- if (currentSdk != null) {
- IAndroidTarget target = currentSdk.getTarget(mRulesEngine.getEditor().getProject());
- if (target != null) {
- return target.getVersion().getApiLevel();
- }
- }
-
- return -1;
- }
-
- @Override
- public IValidator getResourceValidator(
- @NonNull final String resourceTypeName, final boolean uniqueInProject,
- final boolean uniqueInLayout, final boolean exists, final String... allowed) {
- return new IValidator() {
- private ResourceNameValidator mValidator;
-
- @Override
- public String validate(@NonNull String text) {
- if (mValidator == null) {
- ResourceType type = ResourceType.getEnum(resourceTypeName);
- if (uniqueInLayout) {
- assert !uniqueInProject;
- assert !exists;
- Set<String> existing = new HashSet<String>();
- Document doc = mRulesEngine.getEditor().getModel().getXmlDocument();
- if (doc != null) {
- addIds(doc, existing);
- }
- for (String s : allowed) {
- existing.remove(s);
- }
- mValidator = ResourceNameValidator.create(false, existing, type);
- } else {
- assert allowed.length == 0;
- IProject project = mRulesEngine.getEditor().getProject();
- mValidator = ResourceNameValidator.create(false, project, type);
- if (uniqueInProject) {
- mValidator.unique();
- }
- }
- if (exists) {
- mValidator.exist();
- }
- }
-
- return mValidator.isValid(text);
- }
- };
- }
-
- /** Find declared ids under the given DOM node */
- private static void addIds(Node node, Set<String> ids) {
- if (node.getNodeType() == Node.ELEMENT_NODE) {
- Element element = (Element) node;
- String id = element.getAttributeNS(ANDROID_URI, ATTR_ID);
- if (id != null && id.startsWith(NEW_ID_PREFIX)) {
- ids.add(BaseViewRule.stripIdPrefix(id));
- }
- }
-
- NodeList children = node.getChildNodes();
- for (int i = 0, n = children.getLength(); i < n; i++) {
- Node child = children.item(i);
- addIds(child, ids);
- }
- }
-
- @Override
- public String displayReferenceInput(@Nullable String currentValue) {
- GraphicalEditorPart graphicalEditor = mRulesEngine.getEditor();
- LayoutEditorDelegate delegate = graphicalEditor.getEditorDelegate();
- IProject project = delegate.getEditor().getProject();
- if (project != null) {
- // get the resource repository for this project and the system resources.
- ResourceRepository projectRepository =
- ResourceManager.getInstance().getProjectResources(project);
- Shell shell = AdtPlugin.getShell();
- if (shell == null) {
- return null;
- }
- ReferenceChooserDialog dlg = new ReferenceChooserDialog(
- project,
- projectRepository,
- shell);
- dlg.setPreviewHelper(new ResourcePreviewHelper(dlg, graphicalEditor));
-
- dlg.setCurrentResource(currentValue);
-
- if (dlg.open() == Window.OK) {
- return dlg.getCurrentResource();
- }
- }
-
- return null;
- }
-
- @Override
- public String displayResourceInput(@NonNull String resourceTypeName,
- @Nullable String currentValue) {
- return displayResourceInput(resourceTypeName, currentValue, null);
- }
-
- private String displayResourceInput(String resourceTypeName, String currentValue,
- IInputValidator validator) {
- ResourceType type = ResourceType.getEnum(resourceTypeName);
- GraphicalEditorPart graphicalEditor = mRulesEngine.getEditor();
- return ResourceChooser.chooseResource(graphicalEditor, type, currentValue, validator);
- }
-
- @Override
- public String[] displayMarginInput(@Nullable String all, @Nullable String left,
- @Nullable String right, @Nullable String top, @Nullable String bottom) {
- GraphicalEditorPart editor = mRulesEngine.getEditor();
- IProject project = editor.getProject();
- if (project != null) {
- Shell shell = AdtPlugin.getShell();
- if (shell == null) {
- return null;
- }
- AndroidTargetData data = editor.getEditorDelegate().getEditor().getTargetData();
- MarginChooser dialog = new MarginChooser(shell, editor, data, all, left, right,
- top, bottom);
- if (dialog.open() == Window.OK) {
- return dialog.getMargins();
- }
- }
-
- return null;
- }
-
- @Override
- public String displayIncludeSourceInput() {
- AndroidXmlEditor editor = mRulesEngine.getEditor().getEditorDelegate().getEditor();
- IInputValidator validator = CyclicDependencyValidator.create(editor.getInputFile());
- return displayResourceInput(ResourceType.LAYOUT.getName(), null, validator);
- }
-
- @Override
- public void select(final @NonNull Collection<INode> nodes) {
- LayoutCanvas layoutCanvas = mRulesEngine.getEditor().getCanvasControl();
- final SelectionManager selectionManager = layoutCanvas.getSelectionManager();
- selectionManager.select(nodes);
- // ALSO run an async select since immediately after nodes are created they
- // may not be selectable. We can't ONLY run an async exec since
- // code may depend on operating on the selection.
- layoutCanvas.getDisplay().asyncExec(new Runnable() {
- @Override
- public void run() {
- selectionManager.select(nodes);
- }
- });
- }
-
- @Override
- public String displayFragmentSourceInput() {
- try {
- // Compute a search scope: We need to merge all the subclasses
- // android.app.Fragment and android.support.v4.app.Fragment
- IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
- IProject project = mRulesEngine.getProject();
- final IJavaProject javaProject = BaseProjectHelper.getJavaProject(project);
- if (javaProject != null) {
- IType oldFragmentType = javaProject.findType(CLASS_V4_FRAGMENT);
-
- // First check to make sure fragments are available, and if not,
- // warn the user.
- IAndroidTarget target = Sdk.getCurrent().getTarget(project);
- // No, this should be using the min SDK instead!
- if (target.getVersion().getApiLevel() < 11 && oldFragmentType == null) {
- // Compatibility library must be present
- MessageDialog dialog =
- new MessageDialog(
- Display.getCurrent().getActiveShell(),
- "Fragment Warning",
- null,
- "Fragments require API level 11 or higher, or a compatibility "
- + "library for older versions.\n\n"
- + " Do you want to install the compatibility library?",
- MessageDialog.QUESTION,
- new String[] { "Install", "Cancel" },
- 1 /* default button: Cancel */);
- int answer = dialog.open();
- if (answer == 0) {
- if (!AddSupportJarAction.install(project)) {
- return null;
- }
- } else {
- return null;
- }
- }
-
- // Look up sub-types of each (new fragment class and compatibility fragment
- // class, if any) and merge the two arrays - then create a scope from these
- // elements.
- IType[] fragmentTypes = new IType[0];
- IType[] oldFragmentTypes = new IType[0];
- if (oldFragmentType != null) {
- ITypeHierarchy hierarchy =
- oldFragmentType.newTypeHierarchy(new NullProgressMonitor());
- oldFragmentTypes = hierarchy.getAllSubtypes(oldFragmentType);
- }
- IType fragmentType = javaProject.findType(CLASS_FRAGMENT);
- if (fragmentType != null) {
- ITypeHierarchy hierarchy =
- fragmentType.newTypeHierarchy(new NullProgressMonitor());
- fragmentTypes = hierarchy.getAllSubtypes(fragmentType);
- }
- IType[] subTypes = new IType[fragmentTypes.length + oldFragmentTypes.length];
- System.arraycopy(fragmentTypes, 0, subTypes, 0, fragmentTypes.length);
- System.arraycopy(oldFragmentTypes, 0, subTypes, fragmentTypes.length,
- oldFragmentTypes.length);
- scope = SearchEngine.createJavaSearchScope(subTypes, IJavaSearchScope.SOURCES);
- }
-
- Shell parent = AdtPlugin.getShell();
- final AtomicReference<String> returnValue =
- new AtomicReference<String>();
- final AtomicReference<SelectionDialog> dialogHolder =
- new AtomicReference<SelectionDialog>();
- final SelectionDialog dialog = JavaUI.createTypeDialog(
- parent,
- new ProgressMonitorDialog(parent),
- scope,
- IJavaElementSearchConstants.CONSIDER_CLASSES, false,
- // Use ? as a default filter to fill dialog with matches
- "?", //$NON-NLS-1$
- new TypeSelectionExtension() {
- @Override
- public Control createContentArea(Composite parentComposite) {
- Composite composite = new Composite(parentComposite, SWT.NONE);
- composite.setLayout(new GridLayout(1, false));
- Button button = new Button(composite, SWT.PUSH);
- button.setText("Create New...");
- button.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- String fqcn = createNewFragmentClass(javaProject);
- if (fqcn != null) {
- returnValue.set(fqcn);
- dialogHolder.get().close();
- }
- }
- });
- return composite;
- }
-
- @Override
- public ITypeInfoFilterExtension getFilterExtension() {
- return new ITypeInfoFilterExtension() {
- @Override
- public boolean select(ITypeInfoRequestor typeInfoRequestor) {
- int modifiers = typeInfoRequestor.getModifiers();
- if (!Flags.isPublic(modifiers)
- || Flags.isInterface(modifiers)
- || Flags.isEnum(modifiers)
- || Flags.isAbstract(modifiers)) {
- return false;
- }
- return true;
- }
- };
- }
- });
- dialogHolder.set(dialog);
-
- dialog.setTitle("Choose Fragment Class");
- dialog.setMessage("Select a Fragment class (? = any character, * = any string):");
- if (dialog.open() == IDialogConstants.CANCEL_ID) {
- return null;
- }
- if (returnValue.get() != null) {
- return returnValue.get();
- }
-
- Object[] types = dialog.getResult();
- if (types != null && types.length > 0) {
- return ((IType) types[0]).getFullyQualifiedName();
- }
- } catch (JavaModelException e) {
- AdtPlugin.log(e, null);
- } catch (CoreException e) {
- AdtPlugin.log(e, null);
- }
- return null;
- }
-
- @Override
- public String displayCustomViewClassInput() {
- try {
- IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
- IProject project = mRulesEngine.getProject();
- final IJavaProject javaProject = BaseProjectHelper.getJavaProject(project);
- if (javaProject != null) {
- // Look up sub-types of each (new fragment class and compatibility fragment
- // class, if any) and merge the two arrays - then create a scope from these
- // elements.
- IType[] viewTypes = new IType[0];
- IType fragmentType = javaProject.findType(CLASS_VIEW);
- if (fragmentType != null) {
- ITypeHierarchy hierarchy =
- fragmentType.newTypeHierarchy(new NullProgressMonitor());
- viewTypes = hierarchy.getAllSubtypes(fragmentType);
- }
- scope = SearchEngine.createJavaSearchScope(viewTypes, IJavaSearchScope.SOURCES);
- }
-
- Shell parent = AdtPlugin.getShell();
- final AtomicReference<String> returnValue =
- new AtomicReference<String>();
- final AtomicReference<SelectionDialog> dialogHolder =
- new AtomicReference<SelectionDialog>();
- final SelectionDialog dialog = JavaUI.createTypeDialog(
- parent,
- new ProgressMonitorDialog(parent),
- scope,
- IJavaElementSearchConstants.CONSIDER_CLASSES, false,
- // Use ? as a default filter to fill dialog with matches
- "?", //$NON-NLS-1$
- new TypeSelectionExtension() {
- @Override
- public Control createContentArea(Composite parentComposite) {
- Composite composite = new Composite(parentComposite, SWT.NONE);
- composite.setLayout(new GridLayout(1, false));
- Button button = new Button(composite, SWT.PUSH);
- button.setText("Create New...");
- button.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- String fqcn = createNewCustomViewClass(javaProject);
- if (fqcn != null) {
- returnValue.set(fqcn);
- dialogHolder.get().close();
- }
- }
- });
- return composite;
- }
-
- @Override
- public ITypeInfoFilterExtension getFilterExtension() {
- return new ITypeInfoFilterExtension() {
- @Override
- public boolean select(ITypeInfoRequestor typeInfoRequestor) {
- int modifiers = typeInfoRequestor.getModifiers();
- if (!Flags.isPublic(modifiers)
- || Flags.isInterface(modifiers)
- || Flags.isEnum(modifiers)
- || Flags.isAbstract(modifiers)) {
- return false;
- }
- return true;
- }
- };
- }
- });
- dialogHolder.set(dialog);
-
- dialog.setTitle("Choose Custom View Class");
- dialog.setMessage("Select a Custom View class (? = any character, * = any string):");
- if (dialog.open() == IDialogConstants.CANCEL_ID) {
- return null;
- }
- if (returnValue.get() != null) {
- return returnValue.get();
- }
-
- Object[] types = dialog.getResult();
- if (types != null && types.length > 0) {
- return ((IType) types[0]).getFullyQualifiedName();
- }
- } catch (JavaModelException e) {
- AdtPlugin.log(e, null);
- } catch (CoreException e) {
- AdtPlugin.log(e, null);
- }
- return null;
- }
-
- @Override
- public void redraw() {
- mRulesEngine.getEditor().getCanvasControl().redraw();
- }
-
- @Override
- public void layout() {
- mRulesEngine.getEditor().recomputeLayout();
- }
-
- @Override
- public Map<INode, Rect> measureChildren(@NonNull INode parent,
- @Nullable IClientRulesEngine.AttributeFilter filter) {
- RenderService renderService = RenderService.create(mRulesEngine.getEditor());
- Map<INode, Rect> map = renderService.measureChildren(parent, filter);
- if (map == null) {
- map = Collections.emptyMap();
- }
- return map;
- }
-
- @Override
- public int pxToDp(int px) {
- ConfigurationChooser chooser = mRulesEngine.getEditor().getConfigurationChooser();
- float dpi = chooser.getConfiguration().getDensity().getDpiValue();
- return (int) (px * 160 / dpi);
- }
-
- @Override
- public int dpToPx(int dp) {
- ConfigurationChooser chooser = mRulesEngine.getEditor().getConfigurationChooser();
- float dpi = chooser.getConfiguration().getDensity().getDpiValue();
- return (int) (dp * dpi / 160);
- }
-
- @Override
- public int screenToLayout(int pixels) {
- return (int) (pixels / mRulesEngine.getEditor().getCanvasControl().getScale());
- }
-
- private String createNewFragmentClass(IJavaProject javaProject) {
- NewClassWizardPage page = new NewClassWizardPage();
-
- IProject project = mRulesEngine.getProject();
- Sdk sdk = Sdk.getCurrent();
- if (sdk == null) {
- return null;
- }
- IAndroidTarget target = sdk.getTarget(project);
- String superClass;
- if (target == null || target.getVersion().getApiLevel() < 11) {
- superClass = CLASS_V4_FRAGMENT;
- } else {
- superClass = CLASS_FRAGMENT;
- }
- page.setSuperClass(superClass, true /* canBeModified */);
- IPackageFragmentRoot root = ManifestInfo.getSourcePackageRoot(javaProject);
- if (root != null) {
- page.setPackageFragmentRoot(root, true /* canBeModified */);
- }
- ManifestInfo manifestInfo = ManifestInfo.get(project);
- IPackageFragment pkg = manifestInfo.getPackageFragment();
- if (pkg != null) {
- page.setPackageFragment(pkg, true /* canBeModified */);
- }
- OpenNewClassWizardAction action = new OpenNewClassWizardAction();
- action.setConfiguredWizardPage(page);
- action.run();
- IType createdType = page.getCreatedType();
- if (createdType != null) {
- return createdType.getFullyQualifiedName();
- } else {
- return null;
- }
- }
-
- private String createNewCustomViewClass(IJavaProject javaProject) {
- NewClassWizardPage page = new NewClassWizardPage();
-
- IProject project = mRulesEngine.getProject();
- String superClass = CLASS_VIEW;
- page.setSuperClass(superClass, true /* canBeModified */);
- IPackageFragmentRoot root = ManifestInfo.getSourcePackageRoot(javaProject);
- if (root != null) {
- page.setPackageFragmentRoot(root, true /* canBeModified */);
- }
- ManifestInfo manifestInfo = ManifestInfo.get(project);
- IPackageFragment pkg = manifestInfo.getPackageFragment();
- if (pkg != null) {
- page.setPackageFragment(pkg, true /* canBeModified */);
- }
- OpenNewClassWizardAction action = new OpenNewClassWizardAction();
- action.setConfiguredWizardPage(page);
- action.run();
- IType createdType = page.getCreatedType();
- if (createdType != null) {
- return createdType.getFullyQualifiedName();
- } else {
- return null;
- }
- }
-
- @Override
- public @NonNull String getUniqueId(@NonNull String fqcn) {
- UiDocumentNode root = mRulesEngine.getEditor().getModel();
- String prefix = fqcn.substring(fqcn.lastIndexOf('.') + 1);
- prefix = Character.toLowerCase(prefix.charAt(0)) + prefix.substring(1);
- return DescriptorsUtils.getFreeWidgetId(root, prefix);
- }
-
- @Override
- public @NonNull String getAppNameSpace() {
- IProject project = mRulesEngine.getEditor().getProject();
-
- ProjectState projectState = Sdk.getProjectState(project);
- if (projectState != null && projectState.isLibrary()) {
- return AUTO_URI;
- }
-
- ManifestInfo info = ManifestInfo.get(project);
- return URI_PREFIX + info.getPackage();
- }
-}