1 /*******************************************************************************
2 * Copyright (c) 2010, 2012 Ericsson
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
10 * Francois Chouinard - Initial API and implementation
11 * Bernd Hufmann - Added supplementary files/folder handling
12 *******************************************************************************/
14 package org
.eclipse
.linuxtools
.tmf
.ui
.project
.model
;
17 import java
.util
.ArrayList
;
18 import java
.util
.List
;
20 import org
.eclipse
.core
.resources
.IFolder
;
21 import org
.eclipse
.core
.resources
.IProject
;
22 import org
.eclipse
.core
.resources
.IResource
;
23 import org
.eclipse
.core
.resources
.IResourceChangeEvent
;
24 import org
.eclipse
.core
.resources
.IResourceChangeListener
;
25 import org
.eclipse
.core
.resources
.ResourcesPlugin
;
26 import org
.eclipse
.core
.runtime
.CoreException
;
27 import org
.eclipse
.core
.runtime
.IPath
;
28 import org
.eclipse
.core
.runtime
.NullProgressMonitor
;
29 import org
.eclipse
.linuxtools
.internal
.tmf
.ui
.Activator
;
30 import org
.eclipse
.linuxtools
.tmf
.core
.TmfCommonConstants
;
33 * The implementation of the base TMF project model element. It provides default implementation
34 * of the <code>ITmfProjectModelElement</code> interface.
37 * @author Francois Chouinard
39 public abstract class TmfProjectModelElement
implements ITmfProjectModelElement
, IResourceChangeListener
{
41 // ------------------------------------------------------------------------
43 // ------------------------------------------------------------------------
45 private final String fName
;
47 * The project model element resource.
49 protected final IResource fResource
;
51 * The project model resource location (URI)
53 protected final URI fLocation
;
55 * The project model path of a resource.
57 protected final IPath fPath
;
58 private final ITmfProjectModelElement fParent
;
60 * The list of children elements.
62 protected final List
<ITmfProjectModelElement
> fChildren
;
64 // ------------------------------------------------------------------------
66 // ------------------------------------------------------------------------
70 * Creates a base project model element.
71 * @param name The name of the element.
72 * @param resource The element resource.
73 * @param parent The parent model element.
75 protected TmfProjectModelElement(String name
, IResource resource
, ITmfProjectModelElement parent
) {
78 fPath
= resource
.getFullPath();
79 fLocation
= resource
.getLocationURI();
81 fChildren
= new ArrayList
<ITmfProjectModelElement
>();
82 ResourcesPlugin
.getWorkspace().addResourceChangeListener(this);
85 // ------------------------------------------------------------------------
86 // ITmfProjectModelElement
87 // ------------------------------------------------------------------------
90 * @see org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement#getName()
93 public String
getName() {
98 * @see org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement#getResource()
101 public IResource
getResource() {
106 * @see org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement#getPath()
109 public IPath
getPath() {
114 * @see org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement#getLocation()
117 public URI
getLocation() {
122 * @see org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement#getParent()
125 public ITmfProjectModelElement
getParent() {
130 * @see org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement#hasChildren()
133 public boolean hasChildren() {
134 return fChildren
.size() > 0;
138 * @see org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement#getChildren()
141 public List
<ITmfProjectModelElement
> getChildren() {
146 * @see org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement#addChild(org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement)
149 public void addChild(ITmfProjectModelElement child
) {
150 fChildren
.add(child
);
154 * @see org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement#removeChild(org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement)
157 public void removeChild(ITmfProjectModelElement child
) {
158 fChildren
.remove(child
);
163 * @see org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement#refresh()
166 public void refresh() {
167 // Do nothing by default: sub-classes override this on an "as-needed"
171 // ------------------------------------------------------------------------
172 // IResourceChangeListener
173 // ------------------------------------------------------------------------
176 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
179 public void resourceChanged(IResourceChangeEvent event
) {
180 // Do nothing by default: sub-classes override this on an "as-needed"
184 // ------------------------------------------------------------------------
186 // ------------------------------------------------------------------------
189 * @see java.lang.Object#hashCode()
192 public int hashCode() {
193 final int prime
= 31;
195 result
= prime
* result
+ ((fLocation
== null) ?
0 : fLocation
.hashCode());
196 result
= prime
* result
+ ((fName
== null) ?
0 : fName
.hashCode());
197 result
= prime
* result
+ ((fPath
== null) ?
0 : fPath
.hashCode());
202 * @see java.lang.Object#equals(java.lang.Object)
205 public boolean equals(Object other
) {
212 if (!(other
instanceof TmfProjectModelElement
)) {
215 TmfProjectModelElement element
= (TmfProjectModelElement
) other
;
216 return element
.fName
.equals(fName
) && element
.fLocation
.equals(fLocation
);
220 * Returns the trace specific supplementary directory under the project's supplementary folder.
221 * The folder will be created if it doesn't exist.
223 * @param supplFoldername - folder name.
224 * @return returns the trace specific supplementary directory
226 public IFolder
getTraceSupplementaryFolder(String supplFoldername
) {
227 IFolder supplFolderParent
= getSupplementaryFolderParent();
228 return supplFolderParent
.getFolder(supplFoldername
);
232 * Returns the supplementary folder for this project
234 * @return the supplementary folder for this project
236 public IFolder
getSupplementaryFolderParent() {
237 TmfProjectElement project
= getProject();
238 IProject projectResource
= project
.getResource();
239 IFolder supplFolderParent
= projectResource
.getFolder(TmfCommonConstants
.TRACE_SUPPLEMENATARY_FOLDER_NAME
);
241 if (!supplFolderParent
.exists()) {
243 supplFolderParent
.create(true, true, new NullProgressMonitor());
244 } catch (CoreException e
) {
245 Activator
.getDefault().logError("Error creating project specific supplementary folder " + supplFolderParent
, e
); //$NON-NLS-1$
248 return supplFolderParent
;