/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.jsf.model; import org.jboss.tools.common.model.*; import org.jboss.tools.common.model.impl.OrderedObjectImpl; import org.jboss.tools.jst.web.model.ReferenceObject; public class ReferenceGroupImpl extends OrderedObjectImpl implements ReferenceObject, JSFConstants { private static final long serialVersionUID = 6904636256636930824L; private XModelObject[] reference = new XModelObject[0]; private long[] referenceTimeStamp = new long[0]; private boolean isUpToDate = true; public void setReference(XModelObject[] rs) { if(isReferenceEqual(rs)) return; isUpToDate = false; long[] rts = new long[rs.length]; for (int i = 0; i < rs.length; i++) { rts[i] = (i < reference.length && reference[i] == rs[i]) ? referenceTimeStamp[i] : -1; } reference = rs; referenceTimeStamp = rts; saveShapeToReference(get("SHAPE")); //$NON-NLS-1$ } void saveShapeToReference(String shape) { if(shape != null && shape.length() > 0) { for (int i = 0; i < reference.length; i++) reference[i].set("_shape_g", shape); //$NON-NLS-1$ } } public XModelObject[] getReferences() { return reference; } public boolean isUpToDate() { if(!isUpToDate) return false; for (int i = 0; i < reference.length; i++) if(!isUpToDate(i)) return false; return true; } public void notifyUpdate() { isUpToDate = true; for (int i = 0; i < reference.length; i++) notifyUpdate(i); } public boolean isUpToDate(int i) { return (reference[i].getTimeStamp() == referenceTimeStamp[i]); } public void notifyUpdate(int i) { referenceTimeStamp[i] = reference[i].getTimeStamp(); } boolean isReferenceEqual(XModelObject[] rs) { if(rs.length != reference.length) return false; for (int i = 0; i < rs.length; i++) { if(rs[i] != reference[i]) return false; } return true; } public String getPresentationString() { String s = "" + getAttributeValue(ATT_PATH); //$NON-NLS-1$ if(s.length() == 0) s = JSFConstants.EMPTY_NAVIGATION_RULE_NAME; return s; } public void set(String name, String value) { if("SHAPE".equals(name)) { //$NON-NLS-1$ saveShapeToReference(value); } super.set(name, value); } public String getMainIconName() { String path = getAttributeValue(ATT_PATH); if(path == null || path.length() == 0 || path.indexOf('*') > 0) return "main.file.unknow_file"; //$NON-NLS-1$ if(path.endsWith(".jsp")) return "main.file.jsp_file"; //$NON-NLS-1$ //$NON-NLS-2$ if(path.endsWith(".html") || path.endsWith(".htm")) return "main.file.html_file"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ return "main.file.unknow_file"; //$NON-NLS-1$ } public XModelObject getReference() { return reference.length == 0 ? null : reference[0]; } }