01: /*******************************************************************************
02: * Copyright (c) 2000, 2006 IBM Corporation and others.
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * IBM Corporation - initial API and implementation
10: *******************************************************************************/package org.eclipse.pde.internal.core.build;
11:
12: import java.io.IOException;
13: import java.io.InputStream;
14: import java.util.Enumeration;
15: import java.util.Properties;
16:
17: import org.eclipse.pde.core.IModelChangedEvent;
18: import org.eclipse.pde.core.ModelChangedEvent;
19: import org.eclipse.pde.core.build.IBuild;
20: import org.eclipse.pde.core.build.IBuildModel;
21: import org.eclipse.pde.core.build.IBuildModelFactory;
22: import org.eclipse.pde.internal.core.AbstractModel;
23: import org.eclipse.pde.internal.core.PDECore;
24:
25: public abstract class BuildModel extends AbstractModel implements
26: IBuildModel {
27: protected Build fBuild;
28:
29: private BuildModelFactory fFactory;
30:
31: public IBuild getBuild() {
32: if (isLoaded() == false)
33: load();
34: return fBuild;
35: }
36:
37: public IBuild getBuild(boolean createIfMissing) {
38: if (fBuild == null && createIfMissing) {
39: fBuild = new Build();
40: fBuild.setModel(this );
41: setLoaded(true);
42: }
43: return getBuild();
44: }
45:
46: public IBuildModelFactory getFactory() {
47: if (fFactory == null)
48: fFactory = new BuildModelFactory(this );
49: return fFactory;
50: }
51:
52: public abstract void load();
53:
54: public void load(InputStream source, boolean outOfSync) {
55: Properties properties = new Properties();
56: try {
57: properties.load(source);
58: if (!outOfSync)
59: updateTimeStamp();
60: } catch (IOException e) {
61: PDECore.logException(e);
62: return;
63: }
64: fBuild = new Build();
65: fBuild.setModel(this );
66: for (Enumeration names = properties.propertyNames(); names
67: .hasMoreElements();) {
68: String name = names.nextElement().toString();
69: fBuild.processEntry(name, (String) properties.get(name));
70: }
71: setLoaded(true);
72: }
73:
74: public void reload(InputStream source, boolean outOfSync) {
75: if (fBuild != null)
76: fBuild.reset();
77: else {
78: fBuild = new Build();
79: fBuild.setModel(this );
80: }
81: load(source, outOfSync);
82: fireModelChanged(new ModelChangedEvent(this ,
83: IModelChangedEvent.WORLD_CHANGED, new Object[0], null));
84: }
85: }
|