blob: cea5e920d26ec2a411eb63d7fde93c60466b4928 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 Oracle Corporation.
* 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:
* Ian Trimble - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.dtresourceprovider;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
import org.eclipse.jst.jsf.common.ui.internal.utils.ResourceUtils;
import org.eclipse.jst.pagedesigner.PDPlugin;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel;
import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.w3c.dom.stylesheets.StyleSheet;
/**
* Concrete implementation of AbstractDTSkin.
*
* @author Ian Trimble - Oracle
*/
public class DefaultDTSkin extends AbstractDTSkin {
private List<URL> styleSheetURLs;
private List<StyleSheet> styleSheets;
private List<IStructuredModel> models;
private Logger log = PDPlugin.getLogger(DefaultDTSkin.class);
/**
* Constructs an instance.
*
* @param name The human-readable name of the skin.
*/
public DefaultDTSkin(String name) {
super(name);
}
/**
* Constructs an instance.
*
* @param name The human-readable name of the skin.
* @param isDefault true if this instance is considered the default for its
* provider.
*/
public DefaultDTSkin(String name, boolean isDefault) {
super(name, isDefault);
}
/**
* Constructs an instance.
*
* @param name The human-readable name of the skin.
* @param styleSheetURLs The List of URL instances that provide an absolute
* reference to the stylesheets.
*/
public DefaultDTSkin(String name, List<URL> styleSheetURLs) {
this(name);
this.styleSheetURLs = styleSheetURLs;
}
/*
* (non-Javadoc)
* @see org.eclipse.jst.pagedesigner.dtresourceprovider.IDTSkin#getStyleSheets()
*/
public List<StyleSheet> getStyleSheets() {
if (styleSheets == null) {
styleSheets = new ArrayList<StyleSheet>();
if (styleSheetURLs != null) {
for (URL currentURL: styleSheetURLs) {
InputStream in = null;
try {
in = currentURL.openStream();
if (in != null) {
IStructuredModel model = StructuredModelManager.getModelManager().getModelForRead(currentURL.toExternalForm(), in, null);
if (model instanceof ICSSModel) {
styleSheets.add((StyleSheet)((ICSSModel)model).getDocument());
if (models == null) {
models = new ArrayList<IStructuredModel>();
}
models.add(model);
} else {
model.releaseFromRead();
}
}
} catch(IOException ioe) {
log.error("Warning.DefaultDTSkin.FailureLoadingStyleSheet", name, currentURL.toExternalForm(), ioe); //$NON-NLS-1$
} finally {
ResourceUtils.ensureClosed(in);
}
}
}
}
return Collections.unmodifiableList(styleSheets);
}
/*
* (non-Javadoc)
* @see org.eclipse.jst.pagedesigner.dtresourceprovider.IDTSkin#getStyleSheetLocations()
*/
public List<String> getStyleSheetLocations() {
List<String> locations = new ArrayList<String>();
if (styleSheetURLs != null) {
for (URL currentURL: styleSheetURLs) {
URL fileURL;
try {
fileURL = FileLocator.toFileURL(currentURL);
} catch(IOException ioe) {
//attempt to convert to a file protocol URI failed, revert to original form
fileURL = currentURL;
}
locations.add(fileURL.toExternalForm());
}
}
return Collections.unmodifiableList(locations);
}
/*
* (non-Javadoc)
* @see org.eclipse.jst.pagedesigner.dtresourceprovider.IDTSkin#releaseResources()
*/
public void releaseResources() {
if (models != null) {
for (IStructuredModel model: models) {
model.releaseFromRead();
}
models = null;
}
styleSheets = null;
}
}