blob: dfb0f308311393b5961114ae917b4c0d45b51ead [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.css.core.internal.metamodel.util;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.wst.css.core.internal.contentproperties.CSSContentProperties;
import org.eclipse.wst.css.core.internal.metamodel.CSSProfile;
import org.eclipse.wst.css.core.internal.metamodel.CSSProfileRegistry;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSDocument;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
public class CSSProfileFinder {
/**
* Constructor for CSSProfileFinder.
*/
private CSSProfileFinder() {
super();
}
static synchronized public CSSProfileFinder getInstance() {
if (fInstance == null) {
fInstance = new CSSProfileFinder();
}
return fInstance;
}
public CSSProfile findProfileFor(ICSSNode node) {
ICSSModel model = null;
if (node != null) {
ICSSDocument doc = node.getOwnerDocument();
if (doc != null) {
model = doc.getModel();
}
}
return findProfileFor(model);
}
public CSSProfile findProfileFor(IStructuredModel model) {
String baseLocation = null;
if (model instanceof ICSSModel) {
Object modelType = ((ICSSModel) model).getStyleSheetType();
if (modelType == ICSSModel.EXTERNAL) {
baseLocation = model.getBaseLocation();
}
else if (modelType == ICSSModel.EMBEDDED || modelType == ICSSModel.INLINE) {
baseLocation = model.getBaseLocation(); // may be null
}
}
else if (model != null) {
baseLocation = model.getBaseLocation();
}
return findProfileFor(baseLocation);
}
public CSSProfile findProfileFor(String baseLocation) {
CSSProfileRegistry reg = CSSProfileRegistry.getInstance();
CSSProfile profile = null;
if (baseLocation != null) {
IPath path = new Path(baseLocation);
IResource resource = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path);
if (resource == null && path.segmentCount() > 1)
resource = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
if (resource != null) {
String profileID = CSSContentProperties.getProperty(CSSContentProperties.CSS_PROFILE, resource, true);
if (profileID != null && 0 < profileID.length()) {
profile = reg.getProfile(profileID);
}
}
}
return (profile != null) ? profile : reg.getDefaultProfile();
}
static private CSSProfileFinder fInstance = null;
}