| /******************************************************************************* |
| * Copyright (c) 2007, 2008 Oracle. 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: Oracle. - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jpt.core.internal.context.java; |
| |
| import java.util.Iterator; |
| import org.eclipse.jdt.core.dom.CompilationUnit; |
| import org.eclipse.jpt.core.internal.ITextRange; |
| import org.eclipse.jpt.core.internal.context.base.IOverride; |
| import org.eclipse.jpt.core.internal.resource.java.OverrideResource; |
| import org.eclipse.jpt.utility.internal.Filter; |
| import org.eclipse.jpt.utility.internal.StringTools; |
| import org.eclipse.jpt.utility.internal.iterators.FilteringIterator; |
| |
| |
| public abstract class JavaOverride<T extends OverrideResource> extends JavaContextModel implements IOverride |
| { |
| |
| protected String name; |
| |
| protected final Owner owner; |
| |
| protected T overrideResource; |
| |
| public JavaOverride(IJavaJpaContextNode parent, Owner owner) { |
| super(parent); |
| this.owner = owner; |
| } |
| |
| public void initializeFromResource(T overrideResource) { |
| this.overrideResource = overrideResource; |
| this.name = this.name(overrideResource); |
| } |
| |
| protected T getOverrideResource() { |
| return this.overrideResource; |
| } |
| |
| public String getName() { |
| return this.name; |
| } |
| |
| public void setName(String newName) { |
| String oldName = this.name; |
| this.name = newName; |
| this.overrideResource.setName(newName); |
| firePropertyChanged(NAME_PROPERTY, oldName, newName); |
| } |
| |
| protected void setName_(String newName) { |
| String oldName = this.name; |
| this.name = newName; |
| firePropertyChanged(NAME_PROPERTY, oldName, newName); |
| } |
| |
| public void update(T overrideResource) { |
| this.overrideResource = overrideResource; |
| this.setName_(this.name(overrideResource)); |
| } |
| |
| protected String name(OverrideResource overrideResource) { |
| return overrideResource.getName(); |
| } |
| |
| public boolean isVirtual() { |
| return owner().isVirtual(this); |
| } |
| |
| public Owner owner() { |
| return this.owner; |
| } |
| |
| @Override |
| public IJavaJpaContextNode parent() { |
| return (IJavaJpaContextNode) super.parent(); |
| } |
| |
| protected abstract Iterator<String> candidateNames(); |
| |
| private Iterator<String> candidateNames(Filter<String> filter) { |
| return new FilteringIterator<String, String>(this.candidateNames(), filter); |
| } |
| |
| private Iterator<String> quotedCandidateNames(Filter<String> filter) { |
| return StringTools.quote(this.candidateNames(filter)); |
| } |
| |
| @Override |
| public Iterator<String> candidateValuesFor(int pos, Filter<String> filter, CompilationUnit astRoot) { |
| Iterator<String> result = super.candidateValuesFor(pos, filter, astRoot); |
| if (result != null) { |
| return result; |
| } |
| if (this.nameTouches(pos, astRoot)) { |
| return this.quotedCandidateNames(filter); |
| } |
| return null; |
| } |
| |
| public boolean nameTouches(int pos, CompilationUnit astRoot) { |
| return this.overrideResource.nameTouches(pos, astRoot); |
| } |
| |
| public ITextRange validationTextRange(CompilationUnit astRoot) { |
| ITextRange textRange = this.overrideResource.textRange(astRoot); |
| return (textRange != null) ? textRange : this.parent().validationTextRange(astRoot); |
| } |
| |
| } |