LayoutEditorMatchingStrategy.java revision aa80eb0797889e53c43ef91bb8e63d8d9d5f1d24
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
1960a544ae112b5b6a7bba76e3357f143bc207ce6bXavier Ducrohetimport com.android.ide.eclipse.adt.internal.resources.manager.ResourceFolder;
2060a544ae112b5b6a7bba76e3357f143bc207ce6bXavier Ducrohetimport com.android.ide.eclipse.adt.internal.resources.manager.ResourceFolderType;
2160a544ae112b5b6a7bba76e3357f143bc207ce6bXavier Ducrohetimport com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager;
2255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
2355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.core.resources.IFile;
2455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.IEditorInput;
2555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.IEditorMatchingStrategy;
2655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.IEditorReference;
2755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.PartInitException;
2855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.part.FileEditorInput;
2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
3055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/**
3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Matching strategy for the Layout Editor. This is used to open all configurations of a layout
3255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * in the same editor.
3355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */
3455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectpublic class MatchingStrategy implements IEditorMatchingStrategy {
3555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
3655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public boolean matches(IEditorReference editorRef, IEditorInput input) {
3755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        // first check that the file being opened is a layout file.
3855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        if (input instanceof FileEditorInput) {
3955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            FileEditorInput fileInput = (FileEditorInput)input;
40aa80eb0797889e53c43ef91bb8e63d8d9d5f1d24Raphael Moll
4155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            // get the IFile object and check it's in one of the layout folders.
4255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            IFile iFile = fileInput.getFile();
4355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            ResourceFolder resFolder = ResourceManager.getInstance().getResourceFolder(iFile);
44aa80eb0797889e53c43ef91bb8e63d8d9d5f1d24Raphael Moll
4555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            // if it's a layout, we know check the name of the fileInput against the name of the
4655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            // file being currently edited by the editor since those are independent of the config.
4755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            if (resFolder != null && resFolder.getType() == ResourceFolderType.LAYOUT) {
4855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                try {
4955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                    IEditorInput editorInput = editorRef.getEditorInput();
5055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                    if (editorInput instanceof FileEditorInput) {
5155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                        FileEditorInput editorFileInput = (FileEditorInput)editorInput;
5255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                        IFile editorIFile = editorFileInput.getFile();
53aa80eb0797889e53c43ef91bb8e63d8d9d5f1d24Raphael Moll
5455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                        return editorIFile.getProject().equals(iFile.getProject())
5555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                            && editorIFile.getName().equals(iFile.getName());
5655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                    }
5755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                } catch (PartInitException e) {
5855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                    // we do nothing, we'll just return false.
5955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                }
6055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            }
6155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        }
6255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        return false;
6355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
6455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project}
65