Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
blob: a6cd10121e14b741937854c82a58a10904ed4cce (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*******************************************************************************
 * 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.html.core.document;



import org.eclipse.core.runtime.Preferences;
import org.eclipse.wst.html.core.HTMLCorePlugin;
import org.eclipse.wst.sse.core.AdapterFactory;
import org.eclipse.wst.sse.core.INodeAdapter;
import org.eclipse.wst.sse.core.INodeNotifier;
import org.eclipse.wst.sse.core.preferences.CommonModelPreferenceNames;
import org.eclipse.wst.xml.core.document.DocumentTypeAdapter;
import org.eclipse.wst.xml.core.document.XMLDocument;

/**
 */
public class HTMLDocumentTypeAdapterFactory implements AdapterFactory, Preferences.IPropertyChangeListener, CommonModelPreferenceNames {

	private static HTMLDocumentTypeAdapterFactory instance = null;
	private int tagNameCase = DocumentTypeAdapter.UPPER_CASE;
	private int attrNameCase = DocumentTypeAdapter.LOWER_CASE;
	//private IPreferenceStore store = null;
	private Preferences preferences = null;

	/**
	 */
	private HTMLDocumentTypeAdapterFactory() {
		super();
		this.preferences = HTMLCorePlugin.getDefault().getPluginPreferences();
		//this.store = CommonPreferencesPlugin.getDefault().getPreferenceStore(ContentTypeRegistry.HTML_ID);
		if (this.preferences != null) {
			updateCases(); // initialize
			this.preferences.addPropertyChangeListener(this);
		}
	}

	/**
	 * Method that returns the adapter associated with the given object.
	 * It may be a singleton or not ... depending on the needs of the INodeAdapter  ...
	 * but in general it is recommended for an adapter to be stateless, 
	 * so the efficiencies of a singleton can be gained.
	 *
	 * The implementation of this method should call addAdapter on the adapted
	 * object with the correct instance of the adapter.
	 */
	public INodeAdapter adapt(INodeNotifier notifier) {
		INodeAdapter adapter = notifier.getExistingAdapter(DocumentTypeAdapter.class);
		if (adapter != null)
			return adapter;
		if (!(notifier instanceof XMLDocument))
			return null;
		adapter = new HTMLDocumentTypeAdapter((XMLDocument) notifier, this);
		notifier.addAdapter(adapter);
		return adapter;
	}

	/**
	 */
	public int getAttrNameCase() {
		return this.attrNameCase;
	}

	/**
	 * Insert the method's description here.
	 * @return com.ibm.iwt.css.adapters.HTMLStyleSelectorAdapterFactory
	 */
	public synchronized static HTMLDocumentTypeAdapterFactory getInstance() {
		if (instance == null)
			instance = new HTMLDocumentTypeAdapterFactory();
		return instance;
	}

	/**
	 */
	public int getTagNameCase() {
		return this.tagNameCase;
	}

	/**
	 */
	public boolean isFactoryForType(Object type) {
		return (type == DocumentTypeAdapter.class);
	}

	/**
	 */
	public void propertyChange(Preferences.PropertyChangeEvent event) {
		if (event == null)
			return;
		String property = event.getProperty();
		if (property == null)
			return;

		if (property.equals(TAG_NAME_CASE) || property.equals(ATTR_NAME_CASE)) {
			updateCases();
		}
	}

	/**
	 */
	private void updateCases() {
		this.tagNameCase = DocumentTypeAdapter.UPPER_CASE;
		this.attrNameCase = DocumentTypeAdapter.LOWER_CASE;

		if (this.preferences == null)
			return;

		if (this.preferences.getInt(TAG_NAME_CASE) == LOWER) {
			this.tagNameCase = DocumentTypeAdapter.LOWER_CASE;
		}
		if (this.preferences.getInt(ATTR_NAME_CASE) == UPPER) {
			this.attrNameCase = DocumentTypeAdapter.UPPER_CASE;
		}
	}

	/**
	 */
	public void release() {
	}

	/**
	 * Overriding copy method
	 */
	public AdapterFactory copy() {
		return getInstance();
	}
}

Back to the top