/*******************************************************************************
* Copyright (c) 2011 SAP AG 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:
* SAP AG - initial API and implementation
******************************************************************************/
package com.sap.furcas.prettyprinter.policy;
import java.util.Collection;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import com.sap.furcas.metamodel.FURCAS.TCS.ConcreteSyntax;
import com.sap.furcas.metamodel.FURCAS.TCS.ContextTemplate;
import com.sap.furcas.metamodel.FURCAS.TCS.Property;
import com.sap.furcas.metamodel.FURCAS.TCS.SequenceElement;
import com.sap.furcas.metamodel.FURCAS.TCS.SequenceInAlternative;
import com.sap.furcas.metamodel.FURCAS.textblocks.TextBlock;
import com.sap.furcas.prettyprinter.Formatter.FormatRequest;
import com.sap.furcas.prettyprinter.incremental.TextBlockBasedPrintPolicy;
import com.sap.furcas.prettyprinter.incremental.TextBlockIndex;
/**
* A {@link PrintPolicy} which always defaults to the information/order as provided by the used {@link ConcreteSyntax}.
*
* @author Stephan Erb
*
*/
public class DefaultPrintPolicy implements PrintPolicy {
private final TextBlockIndex index;
public DefaultPrintPolicy() {
this(null);
}
public DefaultPrintPolicy(TextBlockIndex index) {
this.index = index;
}
@Override
public PrintPolicy getPolicyFor(EObject modelElement, SequenceElement seqElem, EObject value, ContextTemplate template) {
if (index == null) {
return this;
} else {
return getPolicyFor(index, value, template);
}
}
public static PrintPolicy getPolicyFor(TextBlockIndex index, EObject valueToBePrinted, ContextTemplate template) {
Collection<TextBlock> potentiallyReusableBlocks = index.findTextBlock(template, valueToBePrinted);
if (potentiallyReusableBlocks.isEmpty()) {
return new DefaultPrintPolicy(index);
} else {
// it is unknown which textblocks to prefer if there are several potential
// this may happen if a model element is visible in several views
TextBlock block = potentiallyReusableBlocks.iterator().next();
return new TextBlockBasedPrintPolicy(block, template, index);
}
}
@Override
public Collection<?> getPreferredCollectionOrderOf(EObject modelElement, Property seqElem, Collection<?> elements) {
return elements;
}
@Override
public Collection<ContextTemplate> getPreferredTemplateOrderOf(EObject modelElement, SequenceElement seqElem, EObject value,
Collection<ContextTemplate> elements) {
return elements;
}
@Override
public Collection<SequenceInAlternative> getPreferredAlternativeChoiceOrderOf(Collection<SequenceInAlternative> sequences) {
return sequences;
}
@Override
public Object getRecoveredReferenceValueFor(SequenceElement seqElem) {
return "";
}
@Override
public List<FormatRequest> getOverruledFormattingBetween(List<FormatRequest> pendingFormattingRequest, SequenceElement previousSeqElement, SequenceElement followingSeqElement, String followingTokenValue) {
return pendingFormattingRequest;
}
}