blob: 9f76ea350779873c56e662a65241d58a67a911c3 [file] [log] [blame]
/*******************************************************************************
* 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.css.core.internal.document;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.wst.css.core.internal.provisional.document.ICSSSimpleSelector;
/**
*
*/
class CSSSimpleSelector extends CSSSelectorItem implements ICSSSimpleSelector {
private String fName = null;
private String fCachedString = null;
private StringBuffer fStringBuf = null;
private List fPseudoName = null;
private List fAttribute = null;
private List fClass = null;
private List fID = null;
/**
* CSSSimpleSelector constructor comment.
*/
public CSSSimpleSelector() {
super();
}
/**
*
*/
void addAttribute(String attribute) {
if (fAttribute == null) {
fAttribute = new ArrayList();
}
fAttribute.add(attribute);
addToBuf("[");//$NON-NLS-1$
addToBuf(attribute);
addToBuf("]");//$NON-NLS-1$
fCachedString = null;
}
/**
*
*/
void addClass(String cls) {
if (fClass == null) {
fClass = new ArrayList();
}
fClass.add(cls);
addToBuf(".");//$NON-NLS-1$
addToBuf(cls);
fCachedString = null;
}
/**
*
*/
void addID(String id) {
if (fID == null) {
fID = new ArrayList();
}
fID.add(id);
addToBuf("#");//$NON-NLS-1$
addToBuf(id);
fCachedString = null;
}
/**
*
*/
void addPseudoName(String cls) {
if (fPseudoName == null) {
fPseudoName = new ArrayList();
}
fPseudoName.add(cls);
addToBuf(":");//$NON-NLS-1$
addToBuf(cls);
fCachedString = null;
}
/**
*
*/
private void addToBuf(String str) {
if (fStringBuf == null) {
fStringBuf = new StringBuffer();
}
fStringBuf.append(str);
}
/**
* @return boolean
* @param obj
* java.lang.Object
*/
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || this.getClass() != obj.getClass())
return false;
CSSSimpleSelector foreign = (CSSSimpleSelector) obj;
if (getName().compareToIgnoreCase(foreign.getName()) != 0)
return false;
int i;
// compare pseudo-classes / pseudo-elements
if (getNumOfPseudoNames() != foreign.getNumOfPseudoNames())
return false;
for (i = 0; i < getNumOfPseudoNames(); i++) {
if (getPseudoName(i).compareToIgnoreCase(foreign.getPseudoName(i)) != 0)
return false;
}
// compare classes
if (getNumOfClasses() != foreign.getNumOfClasses())
return false;
for (i = 0; i < getNumOfClasses(); i++) {
if (getClass(i).compareToIgnoreCase(foreign.getClass(i)) != 0)
return false;
}
// compare IDs
if (getNumOfIDs() != foreign.getNumOfIDs())
return false;
for (i = 0; i < getNumOfIDs(); i++) {
if (getID(i).compareToIgnoreCase(foreign.getID(i)) != 0)
return false;
}
// compare Attributes
if (getNumOfAttributes() != foreign.getNumOfAttributes())
return false;
for (i = 0; i < getNumOfAttributes(); i++) {
if (getAttribute(i).compareToIgnoreCase(foreign.getAttribute(i)) != 0)
return false;
}
return true;
}
/**
* @return java.lang.String
* @param index
* int
*/
public String getAttribute(int index) {
if (fAttribute != null && 0 <= index && index < fAttribute.size()) {
return (String) fAttribute.get(index);
}
else {
return "";//$NON-NLS-1$
}
}
/**
* @return java.lang.String
* @param index
* int
*/
public String getClass(int index) {
if (fClass != null && 0 <= index && index < fClass.size()) {
return (String) fClass.get(index);
}
else {
return "";//$NON-NLS-1$
}
}
/**
* @return java.lang.String
* @param index
* int
*/
public String getID(int index) {
if (fID != null && 0 <= index && index < fID.size()) {
return (String) fID.get(index);
}
else {
return "";//$NON-NLS-1$
}
}
/**
* @return int
*/
public int getItemType() {
return SIMPLE;
}
/**
* @return java.lang.String
*/
public String getName() {
return (fName != null) ? fName : "";//$NON-NLS-1$
}
/**
* @return boolean
*/
public int getNumOfAttributes() {
return (fAttribute != null) ? fAttribute.size() : 0;
}
/**
* @return boolean
*/
public int getNumOfClasses() {
return (fClass != null) ? fClass.size() : 0;
}
/**
* @return boolean
*/
public int getNumOfIDs() {
return (fID != null) ? fID.size() : 0;
}
/**
* @return boolean
*/
public int getNumOfPseudoNames() {
return (fPseudoName != null) ? fPseudoName.size() : 0;
}
/**
* @return java.lang.String
* @param index
* int
*/
public String getPseudoName(int index) {
if (fPseudoName != null && 0 <= index && index < fPseudoName.size()) {
return (String) fPseudoName.get(index);
}
else {
return "";//$NON-NLS-1$
}
}
/**
* @return java.lang.String
*/
public String getString() {
if (fCachedString == null) {
StringBuffer buf = new StringBuffer(getName());
if (fStringBuf != null) {
buf.append(fStringBuf.toString());
}
fCachedString = buf.toString();
}
return fCachedString;
}
/**
* @return boolean
*/
public boolean isUniversal() {
return (fName == null || fName.equals("*"));//$NON-NLS-1$
}
/**
*
*/
void setName(String name) {
fName = name;
fCachedString = null;
}
}