--- /dev/null
+/*
+ * Copyright (c) 2003-2004 Christopher Lenz and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * Christopher Lenz - initial API and implementation
+ *
+ * $Id: AbstractRule.java,v 1.1 2004-09-02 18:07:12 jsurfer Exp $
+ */
+
+package net.sourceforge.phpeclipse.css.core.internal.model;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import net.sourceforge.phpeclipse.core.model.SourceReference;
+import net.sourceforge.phpeclipse.css.core.model.IDeclaration;
+import net.sourceforge.phpeclipse.css.core.model.IRule;
+import net.sourceforge.phpeclipse.css.core.model.IStyleSheet;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+
+/**
+ *
+ */
+public abstract class AbstractRule extends SourceReference
+ implements IRule {
+
+ // Instance Variables ------------------------------------------------------
+
+ private IStyleSheet styleSheet;
+
+ private IRule parent;
+
+ private List children = new ArrayList();
+
+ private List declarations = new ArrayList();
+
+ // Constructors ------------------------------------------------------------
+
+ /**
+ * Constructor.
+ *
+ * @param document the document that contains the rule
+ * @param styleSheet the style sheet that contains the rule
+ */
+ public AbstractRule(IDocument document, IStyleSheet styleSheet) {
+ this(document, styleSheet, null);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param document the document that contains the rule
+ * @param styleSheet the style sheet that contains the rule
+ * @param parent the parent rule, or <code>null</code> if the rule is at top
+ * level
+ */
+ public AbstractRule(IDocument document, IStyleSheet styleSheet,
+ IRule parent) {
+ super(document);
+ this.styleSheet = styleSheet;
+ this.parent = parent;
+ }
+
+ // IAdaptable Implementation -----------------------------------------------
+
+ /*
+ * @see IAdaptable#getAdapter(Class)
+ */
+ public Object getAdapter(Class adapter) {
+ return Platform.getAdapterManager().getAdapter(this, adapter);
+ }
+
+ // IStyleRule Implementation -----------------------------------------------
+
+ /*
+ * @see IRule#getStyleSheet()
+ */
+ public final IStyleSheet getStyleSheet() {
+ return styleSheet;
+ }
+
+ /*
+ * @see IRule#getParent()
+ */
+ public final IRule getParent() {
+ return parent;
+ }
+
+ /*
+ * @see IRule#getChildren()
+ */
+ public final IRule[] getChildren() {
+ return (IRule[]) children.toArray(new IRule[children.size()]);
+ }
+
+ /*
+ * @see IRule#getDeclarationAt(int)
+ */
+ public final IDeclaration getDeclarationAt(int offset) {
+ for (Iterator i = declarations.iterator(); i.hasNext(); ) {
+ IDeclaration declaration = (IDeclaration) i.next();
+ IRegion region = declaration.getSourceRegion();
+ if ((offset > region.getOffset())
+ && (offset < (region.getOffset() + region.getLength()))) {
+ return declaration;
+ }
+ }
+ return null;
+ }
+
+ /*
+ * @see IRule#getDeclarations()
+ */
+ public final IDeclaration[] getDeclarations() {
+ return (IDeclaration[]) declarations.toArray(
+ new IDeclaration[declarations.size()]);
+ }
+
+ // Public Methods ----------------------------------------------------------
+
+ public final void addChild(IRule rule) {
+ children.add(rule);
+ }
+
+ public final void addDeclaration(IDeclaration declaration) {
+ declarations.add(declaration);
+ }
+
+}