blob: 411f084bd6d8708f794430928572eb2e1da6862b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 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
* Jens Lukowski/Innoopract - initial renaming/restructuring
*
*******************************************************************************/
package org.eclipse.wst.sse.ui.internal.reconcile.validator;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.wst.sse.ui.internal.Logger;
import org.eclipse.wst.sse.ui.internal.extension.RegistryReader;
/**
* Based off of TransferBuilder. Reads the extension point for
* <code>org.eclipse.wst.sse.ui.extensions.sourcevalidation</code>
*/
public class ValidatorBuilder extends RegistryReader {
public static final String ATT_CLASS = "class"; //$NON-NLS-1$
public static final String ATT_ID = "id"; //$NON-NLS-1$
public static final String ATT_SCOPE = "scope"; //$NON-NLS-1$
public static final ValidatorMetaData[] EMTPY_VMD_ARRAY = new ValidatorMetaData[0];
// extension point ID
public static final String PL_SOURCE_VALIDATION = "sourcevalidation"; //$NON-NLS-1$
public static final String PLUGIN_ID = "org.eclipse.wst.sse.ui"; //$NON-NLS-1$
public static final String TAG_CONTENT_TYPE_IDENTIFIER = "contentTypeIdentifier"; //$NON-NLS-1$
public static final String TAG_PARTITION_TYPE = "partitionType"; //$NON-NLS-1$
public static final String TAG_VALIDATOR = "validator"; //$NON-NLS-1$
public static final String TRACE_FILTER = "reconcile_validator"; //$NON-NLS-1$
public static final String TRUE = "true"; //$NON-NLS-1$
private String fCurrentCTID;
private ValidatorMetaData fCurrentVMD = null;
private List fVmds = new ArrayList();
protected String targetContributionTag;
protected String targetID;
private final String UNKNOWN = "???"; //$NON-NLS-1$
/**
* Returns the name of the part ID attribute that is expected in the
* target extension.
*
* @param element
* @return String
*/
protected String getID(IConfigurationElement element) {
String value = element.getAttribute(ATT_ID);
return value != null ? value : UNKNOWN; //$NON-NLS-1$
}
protected String getValidatorClass(IConfigurationElement element) {
String value = element.getAttribute(ATT_CLASS);
return value != null ? value : UNKNOWN; //$NON-NLS-1$
}
/**
* @param editorId
* @return Transfer[]
*/
public ValidatorMetaData[] getValidatorMetaData(String editorId) {
readContributions(editorId, TAG_VALIDATOR, PL_SOURCE_VALIDATION);
return (ValidatorMetaData[]) fVmds.toArray(new ValidatorMetaData[fVmds.size()]);
}
protected String getValidatorScope(IConfigurationElement element) {
String value = element.getAttribute(ATT_SCOPE);
return value != null ? value : UNKNOWN; //$NON-NLS-1$
}
/**
* Reads the contributions from the registry for the provided workbench
* part and the provided extension point ID.
*
* @param id
* @param tag
* @param extensionPoint
*/
protected void readContributions(String id, String tag, String extensionPoint) {
targetID = id;
targetContributionTag = tag;
IExtensionRegistry registry = Platform.getExtensionRegistry();
readRegistry(registry, PLUGIN_ID, extensionPoint);
}
protected boolean readElement(IConfigurationElement element) {
String tag = element.getName();
//ie. targetContributionTag == validator
if (tag.equals(targetContributionTag)) {
String vId = getID(element);
String vClass = getValidatorClass(element);
String vScope = getValidatorScope(element);
if (vId == null) {
// This is not of interest to us - don't go deeper
return true;
}
// start building a VMD
fCurrentVMD = new ValidatorMetaData(element, vId, vClass, vScope);
fVmds.add(fCurrentVMD);
if (Logger.isTracing(ValidatorBuilder.TRACE_FILTER))
System.out.println("added reconcile validator: " + vId + ":" + vClass + ":" + vScope); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
} else if (tag.equals(TAG_CONTENT_TYPE_IDENTIFIER)) {
// add to current VMD
fCurrentCTID = getID(element);
fCurrentVMD.addContentTypeId(fCurrentCTID);
} else if (tag.equals(TAG_PARTITION_TYPE)) {
// add to current VMD
String partitionType = getID(element);
fCurrentVMD.addParitionType(fCurrentCTID, partitionType);
return true;
} else {
return false;
}
readElementChildren(element);
return true;
}
}