/* * 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.refactoring.core; import com.android.ide.eclipse.adt.AdtPlugin; import com.android.sdklib.SdkConstants; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.text.IDocument; import org.eclipse.wst.sse.core.StructuredModelManager; import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; import org.w3c.dom.Attr; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import java.io.IOException; import java.io.UnsupportedEncodingException; /** * The utility class for android refactoring * */ @SuppressWarnings("restriction") public class RefactoringUtil { private static boolean sRefactorAppPackage = false; /** * Releases SSE read model; saves SSE model if exists edit model * Called in dispose method of refactoring change classes * * @param model the SSE model * @param document the document */ public static void fixModel(IStructuredModel model, IDocument document) { if (model != null) { model.releaseFromRead(); } model = null; if (document == null) { return; } try { model = StructuredModelManager.getModelManager().getExistingModelForEdit(document); if (model != null) { model.save(); } } catch (UnsupportedEncodingException e1) { // ignore } catch (IOException e1) { // ignore } catch (CoreException e1) { // ignore } finally { if (model != null) { model.releaseFromEdit(); } } } /** * Finds attribute by name in android namespace * * @param attributes the attributes collection * @param localName the local part of the qualified name * * @return the first attribute with this name in android namespace */ public static Attr findAndroidAttributes(final NamedNodeMap attributes, final String localName) { Attr attribute = null; for (int j = 0; j < attributes.getLength(); j++) { Node attNode = attributes.item(j); if (attNode != null || attNode instanceof Attr) { Attr attr = (Attr) attNode; String name = attr.getLocalName(); String namespace = attr.getNamespaceURI(); if (SdkConstants.NS_RESOURCES.equals(namespace) && name != null && name.equals(localName)) { attribute = attr; break; } } } return attribute; } /** * Logs the error message * * @param message the message */ public static void logError(String message) { AdtPlugin.log(IStatus.ERROR, AdtPlugin.PLUGIN_ID, message); } /** * Logs the info message * * @param message the message */ public static void logInfo(String message) { AdtPlugin.log(IStatus.INFO, AdtPlugin.PLUGIN_ID, message); } /** * Logs the the exception * * @param e the exception */ public static void log(Throwable e) { AdtPlugin.log(e, e.getMessage()); } /** * @return true if Rename/Move package needs to change the application package * default is false * */ public static boolean isRefactorAppPackage() { return sRefactorAppPackage; } /** * @param refactorAppPackage true if Rename/Move package needs to change the application package */ public static void setRefactorAppPackage(boolean refactorAppPackage) { RefactoringUtil.sRefactorAppPackage = refactorAppPackage; } }