diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateManager.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateManager.java | 261 |
1 files changed, 0 insertions, 261 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateManager.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateManager.java deleted file mode 100644 index 30dd09e31..000000000 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/TemplateManager.java +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (C) 2012 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.wizards.templates; - -import static com.android.SdkConstants.FD_EXTRAS; -import static com.android.SdkConstants.FD_TEMPLATES; -import static com.android.SdkConstants.FD_TOOLS; -import static com.android.ide.eclipse.adt.internal.wizards.templates.TemplateHandler.TEMPLATE_XML; - -import com.android.annotations.NonNull; -import com.android.annotations.Nullable; -import com.android.ide.eclipse.adt.AdtPlugin; -import com.android.ide.eclipse.adt.AdtUtils; -import com.android.ide.eclipse.adt.internal.editors.layout.gle2.DomUtilities; -import com.android.ide.eclipse.adt.internal.preferences.AdtPrefs; -import com.google.common.base.Charsets; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import com.google.common.io.Files; - -import org.w3c.dom.Document; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** Handles locating templates and providing template metadata */ -public class TemplateManager { - private static final Set<String> EXCLUDED_CATEGORIES = Sets.newHashSet("Folder", "Google"); - private static final Set<String> EXCLUDED_FORMFACTORS = Sets.newHashSet("Wear", "TV"); - - TemplateManager() { - } - - /** @return the root folder containing templates */ - @Nullable - public static File getTemplateRootFolder() { - String location = AdtPrefs.getPrefs().getOsSdkFolder(); - if (location != null) { - File folder = new File(location, FD_TOOLS + File.separator + FD_TEMPLATES); - if (folder.isDirectory()) { - return folder; - } - } - - return null; - } - - /** @return the root folder containing extra templates */ - @NonNull - public static List<File> getExtraTemplateRootFolders() { - List<File> folders = new ArrayList<File>(); - String location = AdtPrefs.getPrefs().getOsSdkFolder(); - if (location != null) { - File extras = new File(location, FD_EXTRAS); - if (extras.isDirectory()) { - for (File vendor : AdtUtils.listFiles(extras)) { - if (!vendor.isDirectory()) { - continue; - } - for (File pkg : AdtUtils.listFiles(vendor)) { - if (pkg.isDirectory()) { - File folder = new File(pkg, FD_TEMPLATES); - if (folder.isDirectory()) { - folders.add(folder); - } - } - } - } - - // Legacy - File folder = new File(extras, FD_TEMPLATES); - if (folder.isDirectory()) { - folders.add(folder); - } - } - } - - return folders; - } - - /** - * Returns a template file under the given root, if it exists - * - * @param root the root folder - * @param relativePath the relative path - * @return a template file under the given root, if it exists - */ - @Nullable - public static File getTemplateLocation(@NonNull File root, @NonNull String relativePath) { - File templateRoot = getTemplateRootFolder(); - if (templateRoot != null) { - String rootPath = root.getPath(); - File templateFile = new File(templateRoot, - rootPath.replace('/', File.separatorChar) + File.separator - + relativePath.replace('/', File.separatorChar)); - if (templateFile.exists()) { - return templateFile; - } - } - - return null; - } - - /** - * Returns a template file under one of the available roots, if it exists - * - * @param relativePath the relative path - * @return a template file under one of the available roots, if it exists - */ - @Nullable - public static File getTemplateLocation(@NonNull String relativePath) { - File templateRoot = getTemplateRootFolder(); - if (templateRoot != null) { - File templateFile = new File(templateRoot, - relativePath.replace('/', File.separatorChar)); - if (templateFile.exists()) { - return templateFile; - } - } - - return null; - - } - - /** - * Returns all the templates with the given prefix - * - * @param folder the folder prefix - * @return the available templates - */ - @NonNull - List<File> getTemplates(@NonNull String folder) { - List<File> templates = new ArrayList<File>(); - Map<String, File> templateNames = Maps.newHashMap(); - File root = getTemplateRootFolder(); - if (root != null) { - File[] files = new File(root, folder).listFiles(); - if (files != null) { - for (File file : files) { - if (file.isDirectory()) { // Avoid .DS_Store etc - templates.add(file); - templateNames.put(file.getName(), file); - } - } - } - } - - // Add in templates from extras/ as well. - for (File extra : getExtraTemplateRootFolders()) { - File[] files = new File(extra, folder).listFiles(); - if (files != null) { - for (File file : files) { - if (file.isDirectory()) { - File replaces = templateNames.get(file.getName()); - if (replaces != null) { - int compare = compareTemplates(replaces, file); - if (compare > 0) { - int index = templates.indexOf(replaces); - if (index != -1) { - templates.set(index, file); - } else { - templates.add(file); - } - } - } else { - templates.add(file); - } - } - } - } - } - - // Sort by file name (not path as is File's default) - if (templates.size() > 1) { - Collections.sort(templates, new Comparator<File>() { - @Override - public int compare(File file1, File file2) { - return file1.getName().compareTo(file2.getName()); - } - }); - } - - return templates; - } - - /** - * Compare two files, and return the one with the HIGHEST revision, and if - * the same, most recently modified - */ - private int compareTemplates(File file1, File file2) { - TemplateMetadata template1 = getTemplate(file1); - TemplateMetadata template2 = getTemplate(file2); - - if (template1 == null) { - return 1; - } else if (template2 == null) { - return -1; - } else { - int delta = template2.getRevision() - template1.getRevision(); - if (delta == 0) { - delta = (int) (file2.lastModified() - file1.lastModified()); - } - return delta; - } - } - - /** Cache for {@link #getTemplate()} */ - private Map<File, TemplateMetadata> mTemplateMap; - - @Nullable - TemplateMetadata getTemplate(File templateDir) { - if (mTemplateMap != null) { - TemplateMetadata metadata = mTemplateMap.get(templateDir); - if (metadata != null) { - return metadata; - } - } else { - mTemplateMap = Maps.newHashMap(); - } - - try { - File templateFile = new File(templateDir, TEMPLATE_XML); - if (templateFile.isFile()) { - String xml = Files.toString(templateFile, Charsets.UTF_8); - Document doc = DomUtilities.parseDocument(xml, true); - if (doc != null && doc.getDocumentElement() != null) { - TemplateMetadata metadata = new TemplateMetadata(doc); - if (EXCLUDED_CATEGORIES.contains(metadata.getCategory()) || - EXCLUDED_FORMFACTORS.contains(metadata.getFormFactor())) { - return null; - } - mTemplateMap.put(templateDir, metadata); - return metadata; - } - } - } catch (IOException e) { - AdtPlugin.log(e, null); - } - - return null; - } -} |