001: /*******************************************************************************
002: * Copyright (c) 2006 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.internal.core.cheatsheet.comp;
011:
012: import java.io.IOException;
013: import java.io.InputStream;
014:
015: import javax.xml.parsers.SAXParser;
016:
017: import org.eclipse.core.runtime.CoreException;
018: import org.eclipse.pde.core.IModelChangedEvent;
019: import org.eclipse.pde.core.ModelChangedEvent;
020: import org.eclipse.pde.internal.core.AbstractModel;
021: import org.eclipse.pde.internal.core.PDECore;
022: import org.eclipse.pde.internal.core.XMLDefaultHandler;
023: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCS;
024: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSModel;
025: import org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSModelFactory;
026: import org.w3c.dom.Document;
027: import org.w3c.dom.Element;
028:
029: /**
030: * CompCSModel
031: *
032: */
033: public class CompCSModel extends AbstractModel implements ICompCSModel {
034:
035: private ICompCSModelFactory fFactory;
036:
037: private ICompCS fCompCS;
038:
039: /**
040: *
041: */
042: private static final long serialVersionUID = 1L;
043:
044: /**
045: *
046: */
047: public CompCSModel() {
048: // NO-OP
049: }
050:
051: /* (non-Javadoc)
052: * @see org.eclipse.pde.internal.core.AbstractModel#updateTimeStamp()
053: */
054: protected void updateTimeStamp() {
055: // NO-OP
056: }
057:
058: /* (non-Javadoc)
059: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSModel#getCompCS()
060: */
061: public ICompCS getCompCS() {
062: if (fCompCS == null) {
063: fCompCS = getFactory().createCompCS();
064: }
065: return fCompCS;
066: }
067:
068: /* (non-Javadoc)
069: * @see org.eclipse.pde.internal.core.icheatsheet.comp.ICompCSModel#getFactory()
070: */
071: public ICompCSModelFactory getFactory() {
072: if (fFactory == null) {
073: fFactory = new CompCSModelFactory(this );
074: }
075: return fFactory;
076: }
077:
078: /* (non-Javadoc)
079: * @see org.eclipse.pde.core.IModel#isInSync()
080: */
081: public boolean isInSync() {
082: return true;
083: }
084:
085: /* (non-Javadoc)
086: * @see org.eclipse.pde.core.IModel#load()
087: */
088: public void load() throws CoreException {
089: // NO-OP
090: }
091:
092: /* (non-Javadoc)
093: * @see org.eclipse.pde.core.IModel#load(java.io.InputStream, boolean)
094: */
095: public void load(InputStream source, boolean outOfSync)
096: throws CoreException {
097:
098: try {
099: SAXParser parser = getSaxParser();
100: XMLDefaultHandler handler = new XMLDefaultHandler();
101: parser.parse(source, handler);
102: if (handler.isPrepared()) {
103: processDocument(handler.getDocument());
104: setLoaded(true);
105: }
106: } catch (Exception e) {
107: setException(e);
108: PDECore.logException(e);
109: } finally {
110: try {
111: if (source != null) {
112: source.close();
113: }
114: } catch (IOException e) {
115: // Ignore
116: }
117: }
118:
119: }
120:
121: /* (non-Javadoc)
122: * @see org.eclipse.pde.core.IModel#reload(java.io.InputStream, boolean)
123: */
124: public void reload(InputStream source, boolean outOfSync)
125: throws CoreException {
126:
127: load(source, outOfSync);
128: fireModelChanged(new ModelChangedEvent(this ,
129: IModelChangedEvent.WORLD_CHANGED,
130: new Object[] { fCompCS }, null));
131: }
132:
133: /* (non-Javadoc)
134: * @see org.eclipse.pde.core.IBaseModel#isEditable()
135: */
136: public boolean isEditable() {
137: return false;
138: }
139:
140: /**
141: * @param doc
142: */
143: private void processDocument(Document doc) {
144: Element rootNode = doc.getDocumentElement();
145: if (fCompCS == null) {
146: fCompCS = getFactory().createCompCS();
147: } else {
148: fCompCS.reset();
149: }
150: fCompCS.parse(rootNode);
151: }
152:
153: }
|