Package org.eclipse.jst.pagedesigner.dtresourceprovider

Source Code of org.eclipse.jst.pagedesigner.dtresourceprovider.DefaultDTSkin

/*******************************************************************************
* 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;
  }

}
TOP

Related Classes of org.eclipse.jst.pagedesigner.dtresourceprovider.DefaultDTSkin

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.