155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/* 255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Licensed under the Eclipse Public License, Version 1.0 (the "License"); 555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * you may not use this file except in compliance with the License. 655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * You may obtain a copy of the License at 755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * http://www.eclipse.org/org/documents/epl-v10.php 955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * 1055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * See the License for the specific language governing permissions and 1455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * limitations under the License. 1555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 1655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 1769425d803b34589309a69eddc53a338e1409b30cXavier Ducrohetpackage com.android.ide.eclipse.adt.internal.editors.layout; 1855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 19026ba97e98e0527d910e15c4e1512893a777a8d2Xavier Ducrohetimport com.android.ide.common.resources.ResourceFolder; 2098aedb192efc5169227231043f511cd50bdd9ac9Tor Norbyeimport com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor; 2160a544ae112b5b6a7bba76e3357f143bc207ce6bXavier Ducrohetimport com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager; 22868a7bbe7c5862c02483ef8f71276fc551d40d60Xavier Ducrohetimport com.android.resources.ResourceFolderType; 2355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 2455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.core.resources.IFile; 2555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.IEditorInput; 2655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.IEditorMatchingStrategy; 2755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.IEditorReference; 2855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.PartInitException; 2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.part.FileEditorInput; 3055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/** 3255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Matching strategy for the Layout Editor. This is used to open all configurations of a layout 3355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * in the same editor. 3455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */ 35e50549f54810c29bffc681e39d33158ab2a8f26eRaphaelpublic class LayoutEditorMatchingStrategy implements IEditorMatchingStrategy { 3655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project 37ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 3855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project public boolean matches(IEditorReference editorRef, IEditorInput input) { 3955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // first check that the file being opened is a layout file. 4055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (input instanceof FileEditorInput) { 4155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project FileEditorInput fileInput = (FileEditorInput)input; 42aa80eb0797889e53c43ef91bb8e63d8d9d5f1d24Raphael Moll 4355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // get the IFile object and check it's in one of the layout folders. 44fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye IFile file = fileInput.getFile(); 45dcd506c6482e7476941a6d4c14b6dd5eb51c85f9Tor Norbye ResourceManager manager = ResourceManager.getInstance(); 46fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye ResourceFolder resFolder = manager.getResourceFolder(file); 47aa80eb0797889e53c43ef91bb8e63d8d9d5f1d24Raphael Moll 4898aedb192efc5169227231043f511cd50bdd9ac9Tor Norbye // Per the IEditorMatchingStrategy documentation, editorRef.getEditorInput() 4998aedb192efc5169227231043f511cd50bdd9ac9Tor Norbye // is expensive so try exclude files that definitely don't match, such 5098aedb192efc5169227231043f511cd50bdd9ac9Tor Norbye // as those with the wrong extension or wrong file name 51fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye if (!file.getName().equals(editorRef.getName()) || 5298aedb192efc5169227231043f511cd50bdd9ac9Tor Norbye !editorRef.getId().equals(CommonXmlEditor.ID)) { 5398aedb192efc5169227231043f511cd50bdd9ac9Tor Norbye return false; 5498aedb192efc5169227231043f511cd50bdd9ac9Tor Norbye } 5598aedb192efc5169227231043f511cd50bdd9ac9Tor Norbye 56e50549f54810c29bffc681e39d33158ab2a8f26eRaphael // if it's a layout, we now check the name of the fileInput against the name of the 5755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // file being currently edited by the editor since those are independent of the config. 5855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (resFolder != null && resFolder.getType() == ResourceFolderType.LAYOUT) { 5955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project try { 6055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project IEditorInput editorInput = editorRef.getEditorInput(); 6155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project if (editorInput instanceof FileEditorInput) { 6255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project FileEditorInput editorFileInput = (FileEditorInput)editorInput; 63fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye IFile editorFile = editorFileInput.getFile(); 64aa80eb0797889e53c43ef91bb8e63d8d9d5f1d24Raphael Moll 65fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye ResourceFolder editorFolder = manager.getResourceFolder(editorFile); 66dcd506c6482e7476941a6d4c14b6dd5eb51c85f9Tor Norbye if (editorFolder == null 67dcd506c6482e7476941a6d4c14b6dd5eb51c85f9Tor Norbye || editorFolder.getType() != ResourceFolderType.LAYOUT) { 68dcd506c6482e7476941a6d4c14b6dd5eb51c85f9Tor Norbye return false; 69dcd506c6482e7476941a6d4c14b6dd5eb51c85f9Tor Norbye } 70dcd506c6482e7476941a6d4c14b6dd5eb51c85f9Tor Norbye 71fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye return editorFile.getProject().equals(file.getProject()) 72fe51dba2aa25e559786e5da315d4db714ffe7559Tor Norbye && editorFile.getName().equals(file.getName()); 7355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 7455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } catch (PartInitException e) { 7555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project // we do nothing, we'll just return false. 7655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 7755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 7855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 7955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project return false; 8055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project } 8155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project} 82