eu.esdihumboldt.hale.common.align.model.BaseAlignmentCell.java Source code

Java tutorial

Introduction

Here is the source code for eu.esdihumboldt.hale.common.align.model.BaseAlignmentCell.java

Source

/*
 * Copyright (c) 2013 Data Harmonisation Panel
 * 
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the License,
 * or (at your option) any later version.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this distribution. If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contributors:
 *     Data Harmonisation Panel <http://www.dhpanel.eu>
 */

package eu.esdihumboldt.hale.common.align.model;

import java.net.URI;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.Sets;

/**
 * Cell wrapper for cells of a base alignment.
 * 
 * @author Kai Schwierczek
 */
public class BaseAlignmentCell implements ModifiableCell {

    private final ModifiableCell base;
    private final URI baseAlignment;
    private final String prefix;
    private final Set<String> disabledFor = new HashSet<String>();
    private TransformationMode mode;

    /**
     * Constructor.
     * 
     * @param base the base cell
     * @param baseAlignment the URI of the alignment the cell is from
     * @param prefix the alignment's prefix
     */
    public BaseAlignmentCell(ModifiableCell base, URI baseAlignment, String prefix) {
        this.base = base;
        this.baseAlignment = baseAlignment;
        this.prefix = prefix;
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#getSource()
     */
    @Override
    public ListMultimap<String, ? extends Entity> getSource() {
        return base.getSource();
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#getTarget()
     */
    @Override
    public ListMultimap<String, ? extends Entity> getTarget() {
        return base.getTarget();
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#getTransformationParameters()
     */
    @Override
    public ListMultimap<String, ParameterValue> getTransformationParameters() {
        return base.getTransformationParameters();
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#getTransformationIdentifier()
     */
    @Override
    public String getTransformationIdentifier() {
        return base.getTransformationIdentifier();
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#getId()
     */
    @Override
    public String getId() {
        return prefix + ':' + base.getId();
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#getDisabledFor()
     */
    @Override
    public Set<String> getDisabledFor() {
        return Collections.unmodifiableSet(new HashSet<String>(Sets.union(disabledFor, base.getDisabledFor())));
    }

    /**
     * Returns the base alignment.
     * 
     * @return the base alignment
     */
    public URI getBaseAlignment() {
        return baseAlignment;
    }

    /**
     * Returns the result of {@link #getDisabledFor()} from the base cell.
     * 
     * @return the result of {@link #getDisabledFor()} from the base cell
     */
    public Set<String> getBaseDisabledFor() {
        return base.getDisabledFor();
    }

    /**
     * Returns the additional disabled for entries of the extended cell.
     * 
     * @return the additional disabled for entries of the extended cell
     */
    public Set<String> getAdditionalDisabledFor() {
        return disabledFor;
    }

    /**
     * Disables this cell's base cell for the given cell.
     * 
     * @param cell the cell to disable/enable this cell for
     * @param disabled whether the cell should be disabled or not
     */
    public void setBaseDisabledFor(Cell cell, boolean disabled) {
        base.setDisabledFor(cell, disabled);
    }

    @Override
    public void setDisabledFor(String cellId, boolean disabled) {
        if (disabled && !base.getDisabledFor().contains(cellId))
            disabledFor.add(cellId);
        if (!disabled) {
            if (base.getDisabledFor().contains(cellId))
                throw new IllegalArgumentException("Can not re-enable a cell disabled in the base alignment.");
            else
                disabledFor.remove(cellId);
        }

    }

    @Override
    public TransformationMode getTransformationMode() {
        if (mode != null)
            return mode;
        return base.getTransformationMode();
    }

    /**
     * States if the cell overrides the transformation mode.
     * 
     * @return if the cell overrides the base cell's transformation mode
     */
    public boolean overridesTransformationMode() {
        return mode != null && !mode.equals(base.getTransformationMode());
    }

    @Override
    public void setTransformationMode(TransformationMode mode) {
        this.mode = mode;
    }

    /**
     * Set the transformation mode of the base cell.
     * 
     * @param mode the cell transformation mode
     */
    public void setBaseTransformationMode(TransformationMode mode) {
        base.setTransformationMode(mode);
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#getAnnotations(java.lang.String)
     */
    @Override
    public List<?> getAnnotations(String type) {
        return base.getAnnotations(type);
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#getAnnotationTypes()
     */
    @Override
    public Set<String> getAnnotationTypes() {
        return base.getAnnotationTypes();
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#addAnnotation(java.lang.String)
     */
    @Override
    public Object addAnnotation(String type) {
        // TODO allow adding annotations?
        throw new UnsupportedOperationException("Cannot add annotation to a cell of a base alignment.");
    }

    @Override
    public void addAnnotation(String type, Object annotation) {
        // TODO allow adding annotations?
        throw new UnsupportedOperationException("Cannot add annotation to a cell of a base alignment.");
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#removeAnnotation(java.lang.String,
     *      java.lang.Object)
     */
    @Override
    public void removeAnnotation(String type, Object annotation) {
        // TODO allow removing annotations?
        throw new UnsupportedOperationException("Cannot remove annotation to a cell of a base alignment.");
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#getDocumentation()
     */
    @Override
    public ListMultimap<String, String> getDocumentation() {
        // TODO allow editing of documentation?
        return Multimaps.unmodifiableListMultimap(base.getDocumentation());
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#getPriority()
     */
    @Override
    public Priority getPriority() {
        return base.getPriority();
    }

    /**
     * @see eu.esdihumboldt.hale.common.align.model.Cell#isBaseCell()
     */
    @Override
    public boolean isBaseCell() {
        return true;
    }
}