All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.equinox.internal.p2.metadata.TouchpointInstruction Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 *  Copyright (c) 2008, 2010 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
 *     EclipseSource - ongoing development
 *******************************************************************************/
package org.eclipse.equinox.internal.p2.metadata;

import org.eclipse.equinox.p2.metadata.MetadataFactory;

import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.equinox.p2.metadata.ITouchpointInstruction;

/**
 * A touchpoint instruction contains either a sequence of instruction statements
 * to be executed during a particular engine phase, or some simple string value
 * that is needed by a touchpoint to execute its phases.
 * 

* The format of a touchpoint instruction statement sequence is as follows: * * statement-sequence : * | statement ';' * | statement-sequence statement * ; * *Where a statement is of the format: * * statement : * | actionName '(' parameters ')' * ; * * parameters : * | // empty * | parameter * | parameters ',' parameter * ; * * parameter : * | paramName ':' paramValue * ; * * actionName, paramName, paramValue : * | String * ; * * @noextend This class is not intended to be subclassed by clients. * @see MetadataFactory#createTouchpointInstruction(String, String) */ public class TouchpointInstruction implements ITouchpointInstruction { private final String body; private final String importAttribute; /** * Encodes an action statement in string form. This method will * take care of escaping any illegal characters in function parameter values. * * @param actionName The name of the action. * @param parameters The function's parameters. This is a Map * where the keys are parameter names, and the values are parameter values * @return An encoded touchpoint instruction statement */ public static String encodeAction(String actionName, Map parameters) { StringBuffer result = new StringBuffer(actionName); result.append('('); boolean first = true; for (Entry entry : parameters.entrySet()) { if (first) first = false; else result.append(','); result.append(entry.getKey()); result.append(':'); appendEncoded(result, entry.getValue()); } result.append(')').append(';'); return result.toString(); } /** * Append the given value to the given buffer, encoding any illegal characters * with appropriate escape sequences. */ private static void appendEncoded(StringBuffer buf, String value) { char[] chars = value.toCharArray(); for (int i = 0; i < chars.length; i++) { switch (chars[i]) { case '$' : case ',' : case ':' : case ';' : case '{' : case '}' : buf.append("${#").append(Integer.toString(chars[i])).append('}'); //$NON-NLS-1$ break; default : buf.append(chars[i]); } } } /** * Clients must use the factory method on {@link MetadataFactory}. */ public TouchpointInstruction(String body, String importAttribute) { this.body = body; this.importAttribute = importAttribute; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof ITouchpointInstruction)) return false; ITouchpointInstruction other = (ITouchpointInstruction) obj; if (body == null) { if (other.getBody() != null) return false; } else if (!body.equals(other.getBody())) return false; if (importAttribute == null) { if (other.getImportAttribute() != null) return false; } else if (!importAttribute.equals(other.getImportAttribute())) return false; return true; } /** * Returns the body of this touchpoint instruction. The body is either a sequence * of instruction statements, or a simple string value. * * @return The body of this touchpoint instruction */ public String getBody() { return body; } //TODO What is this? Please doc public String getImportAttribute() { return importAttribute; } public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((body == null) ? 0 : body.hashCode()); result = prime * result + ((importAttribute == null) ? 0 : importAttribute.hashCode()); return result; } /** * Returns a string representation of this instruction for debugging purposes only. */ public String toString() { return "Instruction[" + body + ',' + importAttribute + ']'; //$NON-NLS-1$ } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy