/*******************************************************************************
* Copyright (c) 2007 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.el.internal.core.model;
import java.util.ArrayList;
import java.util.List;
import org.jboss.tools.common.el.core.model.ELInstance;
import org.jboss.tools.common.el.core.model.ELModel;
import org.jboss.tools.common.el.core.model.ELObjectType;
import org.jboss.tools.common.el.core.parser.SyntaxError;
/**
*
* @author V. Kabanovich
*
*/
public class ELModelImpl extends ELObjectImpl implements ELModel {
List<SyntaxError> errors = null;
String source;
List<ELInstance> instances = new ArrayList<ELInstance>();
int delta = 0;
public ELModelImpl() {}
public ELModelImpl getModel() {
return this;
}
public String getSource() {
return source;
}
public List<ELInstance> getInstances() {
return instances;
}
public void setSource(String source) {
this.source = source;
}
public void addChild(ELObjectImpl child) {
if(child instanceof ELInstanceImpl) {
addInstance((ELInstanceImpl)child);
} else {
throw new IllegalArgumentException("EL root can have only ELInstances as its children."); //$NON-NLS-1$
}
}
public void addInstance(ELInstanceImpl instance) {
super.addChild(instance);
instances.add(instance);
}
public String toString() {
StringBuffer sb = new StringBuffer();
for (ELInstance p: instances) {
sb.append(p.toString());
}
return sb.toString();
}
public ELObjectType getType() {
return ELObjectType.EL_MODEL;
}
public void setErrors(List<SyntaxError> errors) {
this.errors = errors.isEmpty() ? null : errors;
for (SyntaxError e: errors) {
for (ELInstance i: instances) {
ELInstanceImpl im = (ELInstanceImpl)i;
if(im.contains(e.getPosition())) {
im.addError(e);
break;
}
}
}
}
public List<SyntaxError> getSyntaxErrors() {
return errors == null ? ELInstanceImpl.EMPTY : errors;
}
public void shift(int delta) {
this.delta = delta;
if(instances.size() > 0) {
instances.get(0).getFirstToken().shift(delta);
}
}
}