blob: a205d4f78f9e6783a74e2f02c8aeab8a4715298f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.ide.ui;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.mylyn.commons.core.StatusHandler;
/**
* Class to help get the handle for an xml file
*
* @author Shawn Minto
*/
public class XmlNodeHelper {
/** The filename of the xml file */
private String filename;
/** The start line of the node */
private String end;
public XmlNodeHelper(String handle) {
int first = handle.indexOf(";"); //$NON-NLS-1$
if (first == -1) {
filename = handle;
end = ""; //$NON-NLS-1$
} else {
filename = handle.substring(0, first);
end = handle.substring(first + 1);
}
}
/**
* Constructor - used for pde
*
* @param filename
* The filename
* @param startOffset
* The start line for the node
*/
public XmlNodeHelper(String filename, int s) {
this.filename = filename;
this.end = "" + s; //$NON-NLS-1$
}
/**
* Constructor - used for ant
*
* @param filename
* The filename
* @param startOffset
* The start line for the node
*/
public XmlNodeHelper(String filename, String s) {
this.filename = filename;
this.end = s;
}
/**
* Get the handle for the node Format: filename;startOffset
*
* @return The to the node handle in String form
*/
public String getHandle() {
return filename + ";" + getValue(); //$NON-NLS-1$
}
public String getFilename() {
if (filename != null) {
filename = filename.trim();
}
return filename;
}
public String getValue() {
return end;
}
@Override
public boolean equals(Object e) {
if (e instanceof XmlNodeHelper) {
XmlNodeHelper xnode = ((XmlNodeHelper) e);
return xnode.getHandle().equals(getHandle());
}
return false;
}
@Override
public int hashCode() {
return getHandle().hashCode();
}
/**
* Get the contents of an InputStream
*
* @param is
* The InputStream to get the contents for
* @return The <code>String</code> representing the contents
*/
public static String getContents(InputStream is) {
String contents = ""; //$NON-NLS-1$
// create a new reader for the stream
BufferedReader br = new BufferedReader(new InputStreamReader(is));
try {
// get the contents
String s = ""; //$NON-NLS-1$
char[] cbuf = new char[512];
while (br.read(cbuf) != -1) {
s = new String(cbuf);
contents += s;
}
} catch (IOException e) {
StatusHandler.log(new Status(IStatus.ERROR, IdeUiBridgePlugin.ID_PLUGIN, "Could not get contents", e)); //$NON-NLS-1$
}
return contents;
}
// XXX needed if we are parsing the data again to get info instead of using
// the xml models
//
// private void parseContents(IDocument d, String contents){
// String [] lines = contents.split("\n");
// boolean inQuote = false;
// boolean attr = false;
// String attrName = "";
// String attrVal = "";
// String oldAttrVal = "";
// char prevChar = ' ';
// for(int i = endLine - 1; i >= 0; i--){
// // parse backwards
//
// String line = lines[i];
// for(int cpos = line.length()-1; cpos >=0; cpos--){
//
// if(attr){
// if(attrName.length() != 0 && (isWhitespace(line.charAt(cpos))))
// {
// attr = false;
// if(attrName.toLowerCase(Locale.ENGLISH).equals("name"))
// {
// name = oldAttrVal;
// }
// }
// attrName = line.charAt(cpos) + attrName;
// }
//
// if(line.charAt(cpos) == '"' && inQuote){
// inQuote = false;
// }else if(line.charAt(cpos) == '"' && !inQuote){
// inQuote = true;
// }else if(!inQuote && line.charAt(cpos) == '<' && prevChar != '/'){
// int space = line.indexOf(" ", cpos);
// if(space == -1)
// tagName = line.substring(cpos + 1);
// else
// tagName = line.substring(cpos + 1, space);
// return;
// }else if(!inQuote && line.charAt(cpos) =='='){
// attr = true;
// attrName = "";
// oldAttrVal = attrVal;
// attrVal = "";
// }else if(inQuote){
// attrVal = line.charAt(cpos) + attrVal;
// }
// prevChar = line.charAt(cpos);
// }
// }
// }
//
// private boolean isWhitespace(char c){
// return c == ' ' || c == '\t' || c == '\n' || c == '\r';
// }
//
// public String getCanName()
// {
// int slash = filename.lastIndexOf("/");
// String file = slash==-1?filename:filename.substring(slash+1);
// String s = file + ": " + getTagName();
// if(getName() != null)
// s += " \"" + getName() + "\"";
// s += " : " + startOffset;
// return s;
// }
//
// public String getTagName() {
// if(tagName != null)
// tagName = tagName.trim();
// return tagName;
// }
// public void setTagName(String tagName) {
// this.tagName = tagName;
// }
// public String getName() {
// if(name != null)
// name = name.trim();
// return name;
// }
// public void setName(String name) {
// this.name = name;
// }
//
// public int getEndLine() {
// return endLine;
// }
//
//
// public void setEndLine(int endLine) {
// this.endLine = endLine;
// }
//
//
// public void setStartLine(int startOffset) {
// this.startLine = startOffset;
// }
}