Package edu.isi.karma.controller.command.alignment

Source Code of edu.isi.karma.controller.command.alignment.AddUserLinkToAlignmentCommand

/*******************************************************************************
* Copyright 2012 University of Southern California
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This code was developed by the Information Integration Group as part
* of the Karma project at the Information Sciences Institute of the
* University of Southern California.  For more information, publications,
* and related projects, please see: http://www.isi.edu/integration
******************************************************************************/
package edu.isi.karma.controller.command.alignment;

import java.util.Set;

import org.jgrapht.graph.DirectedWeightedMultigraph;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import edu.isi.karma.controller.command.CommandException;
import edu.isi.karma.controller.command.CommandType;
import edu.isi.karma.controller.command.WorksheetCommand;
import edu.isi.karma.controller.update.AlignmentSVGVisualizationUpdate;
import edu.isi.karma.controller.update.ErrorUpdate;
import edu.isi.karma.controller.update.SemanticTypesUpdate;
import edu.isi.karma.controller.update.UpdateContainer;
import edu.isi.karma.modeling.alignment.Alignment;
import edu.isi.karma.modeling.alignment.AlignmentManager;
import edu.isi.karma.modeling.alignment.LinkIdFactory;
import edu.isi.karma.rep.Worksheet;
import edu.isi.karma.rep.Workspace;
import edu.isi.karma.rep.alignment.DefaultLink;
import edu.isi.karma.rep.alignment.LabeledLink;
import edu.isi.karma.rep.alignment.LinkStatus;
import edu.isi.karma.rep.alignment.Node;

public class AddUserLinkToAlignmentCommand extends WorksheetCommand {

  private final String edgeId;
  private final String alignmentId;
  private Alignment    oldAlignment;
  private DirectedWeightedMultigraph<Node, DefaultLink> oldGraph;
  private String edgeLabel;
 
  // private String edgeLabel;
  private static Logger logger = LoggerFactory.getLogger(AddUserLinkToAlignmentCommand.class);

  public AddUserLinkToAlignmentCommand(String id, String edgeId,
      String alignmentId, String worksheetId) {

    super(id, worksheetId);
    this.edgeId = edgeId;
    this.alignmentId = alignmentId;
   
    addTag(CommandTag.Modeling);
  }

  @Override
  public String getCommandName() {
    return this.getClass().getSimpleName();
  }

  @Override
  public String getTitle() {
    return "Add User DefaultLink";
  }

  @Override
  public String getDescription() {
    return edgeLabel;
  }

  @Override
  public CommandType getCommandType() {
    return CommandType.undoable;
  }

  @SuppressWarnings("unchecked")
  @Override
  public UpdateContainer doIt(Workspace workspace) throws CommandException {
    Alignment alignment = AlignmentManager.Instance().getAlignment(alignmentId);
   
    Worksheet worksheet = workspace.getWorksheet(worksheetId);
    if(alignment == null || alignment.isEmpty()) {
      logger.error("Alignment cannot be null before calling this command since the alignment is created while " +
          "setting the semantic types.");
      return new UpdateContainer(new ErrorUpdate("Error occured while generating the model for the source."));
    }
    // Save the original alignment for undo
    oldAlignment = alignment.getAlignmentClone();
    oldGraph = (DirectedWeightedMultigraph<Node, DefaultLink>)alignment.getGraph().clone();
   
    // Set the other links to the target node to normal
    LinkIdFactory.getLinkTargetId(edgeId);
    Set<LabeledLink> currentLinks = alignment.getCurrentIncomingLinksToNode(LinkIdFactory.getLinkTargetId(edgeId));
    if (currentLinks != null && !currentLinks.isEmpty()) {
      for (LabeledLink currentLink: currentLinks) {
        //if (currentLink.getSource().getId().equals(newLink.getSource().getId()))
          alignment.changeLinkStatus(currentLink.getId(), LinkStatus.Normal);
      }
    }
   
    // Change the status of the user selected edge
    alignment.changeLinkStatus(edgeId, LinkStatus.ForcedByUser);
    if(!this.isExecutedInBatch())
      alignment.align();
   
    return getAlignmentUpdateContainer(alignment, worksheet, workspace);
  }

  @Override
  public UpdateContainer undoIt(Workspace workspace) {
    Worksheet worksheet = workspace.getWorksheet(worksheetId);

    // Revert to the old alignment
    AlignmentManager.Instance().addAlignmentToMap(alignmentId, oldAlignment);
    oldAlignment.setGraph(oldGraph);
   
    // Get the alignment update
    return getAlignmentUpdateContainer(oldAlignment, worksheet, workspace);
  }

  private UpdateContainer getAlignmentUpdateContainer(Alignment alignment,
      Worksheet worksheet, Workspace workspace) {
    // Add the visualization update
    UpdateContainer c = new UpdateContainer();
    c.add(new SemanticTypesUpdate(worksheet, worksheetId, alignment));
    c.add(new AlignmentSVGVisualizationUpdate(
        worksheetId, alignment));
    return c;
  }
}
TOP

Related Classes of edu.isi.karma.controller.command.alignment.AddUserLinkToAlignmentCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.