Skip to main content
summaryrefslogblamecommitdiffstats
blob: 34bf0e934a5725c62085345023641d71af7c1749 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15














                                                                                 
                            
                      
                                       

                                                          
                                                                   

                                                                    
                                                                     
                                                                 
                                                                  



                                                                                                   
                                                                                                       





                                                                                                  
                                                                             
                                                                             
                                                               




                           
                                                   

                                             
              

    










                                                             
      




                                                                                                                







                                                                                                                                                                                                                                                                                                        
                                                                                                                  
 







                                                           
                                                                                 


                                                                                     
                                                         
                                                                                            
                                                                                                                         
                                                                                                       


                                                                                        
                                                                                 
    
 





                                                         











                                                                                                                                                                                                                                                                                                                                                                              


                                                                                                    
                                                                                                            

                                                                                                                             
                                                                                        
                                                                                                              
                                   




                             
                                                                                                                                                                                                                                                                                                        
                                                         
                                                                                            



                                                                                                    
                                                                             


      
                               

                               
                                                                                                                                                                                                                                                                                             
                                     

                                                                              


                                                                                                     
                                               
 
                                                                
                                                                                  

                                                                                     
 
                                                                      
    


























                                                                                                                   
 
/*******************************************************************************
 * Copyright (c) 2004, 2007 Boeing.
 * 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:
 *     Boeing - initial API and implementation
 *******************************************************************************/

package org.eclipse.osee.framework.ui.skynet.Import;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.osee.framework.core.data.IArtifactType;
import org.eclipse.osee.framework.core.operation.AbstractOperation;
import org.eclipse.osee.framework.core.operation.CompositeOperation;
import org.eclipse.osee.framework.core.operation.IOperation;
import org.eclipse.osee.framework.core.operation.NullOperationLogger;
import org.eclipse.osee.framework.core.operation.OperationLogger;
import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
import org.eclipse.osee.framework.skynet.core.importing.RoughArtifact;
import org.eclipse.osee.framework.skynet.core.importing.RoughArtifactKind;
import org.eclipse.osee.framework.skynet.core.importing.operations.CompleteArtifactImportOperation;
import org.eclipse.osee.framework.skynet.core.importing.operations.FilterArtifactTypesByAttributeTypes;
import org.eclipse.osee.framework.skynet.core.importing.operations.RoughArtifactCollector;
import org.eclipse.osee.framework.skynet.core.importing.operations.RoughToRealArtifactOperation;
import org.eclipse.osee.framework.skynet.core.importing.operations.SourceToRoughArtifactOperation;
import org.eclipse.osee.framework.skynet.core.importing.parsers.IArtifactExtractor;
import org.eclipse.osee.framework.skynet.core.importing.resolvers.IArtifactImportResolver;
import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
import org.eclipse.osee.framework.skynet.core.transaction.TransactionManager;
import org.eclipse.osee.framework.ui.skynet.ArtifactValidationCheckOperation;
import org.eclipse.osee.framework.ui.skynet.internal.Activator;

/**
 * @author Robert A. Fisher
 * @author Ryan D. Brooks
 */
public final class ArtifactImportOperationFactory {

   private ArtifactImportOperationFactory() {
      super();
   }

   /**
    * <p>
    * Create a CompositeOperation, full import sequence.<br/>
    * <ol>
    * <li>SourceToRoughArtifactOperation</li>
    * <li>RoughToRealArtifactOperation</li>
    * <li>ArtifactValidationCheckOperation</li>
    * <li>CompleteArtifactImportOperation</li>
    * </ol>
    * </p>
    * <br/>
    * 
    * @param param
    * @return
    * @throws OseeCoreException
    */
   public static IOperation completeOperation(ArtifactImportOperationParameter param) throws OseeCoreException {
      return completeOperation(param.getSourceFile(), param.getDestinationArtifact(), param.getLogger(),
         param.getExtractor(), param.getResolver(), param.isStopOnError(), param.getGoverningTransaction(),
         param.isExecuteTransaction());
   }

   public static IOperation completeOperation(File sourceFile, Artifact destinationArtifact, OperationLogger logger, IArtifactExtractor extractor, IArtifactImportResolver resolver, boolean stopOnError, SkynetTransaction governingTransaction, boolean executeTransaction) throws OseeCoreException {
      CheckAndThrow(sourceFile, destinationArtifact, extractor, resolver);

      RoughArtifactCollector collector = new RoughArtifactCollector(new RoughArtifact(RoughArtifactKind.PRIMARY));

      if (logger == null) {
         logger = NullOperationLogger.getSingleton();
      }

      SkynetTransaction transaction = governingTransaction;
      if (transaction == null) {
         executeTransaction = true;
         transaction =
            TransactionManager.createTransaction(destinationArtifact.getBranch(),
               "ArtifactImportOperationFactory: Artifact Import Wizard transaction");
      }

      List<IOperation> ops = new ArrayList<IOperation>();
      ops.add(new SourceToRoughArtifactOperation(logger, extractor, sourceFile, collector));
      ops.add(new RoughToRealArtifactOperation(transaction, destinationArtifact, collector, resolver, false, extractor));
      ops.add(new ArtifactValidationCheckOperation(destinationArtifact.getDescendants(), stopOnError));
      if (executeTransaction) {
         ops.add(new CompleteArtifactImportOperation(transaction, destinationArtifact));
      }
      return new CompositeOperation("Artifact Import", Activator.PLUGIN_ID, ops);
   }

   private static void CheckAndThrow(Object... objects) {
      for (Object object : objects) {
         Assert.isNotNull(object);
      }
   }

   /**
    * Creates a full import process.
    * <ol>
    * <li>SourceToRoughArtifactOperation</li>
    * <li>FilterArtifactTypesByAttributeTypes</li> if runFilterByAttributes == true
    * <li>RoughToRealArtifactOperation</li>
    * <li>FetchAndAddDescendantsOperation</li>
    * <li>ArtifactValidationCheckOperation</li>
    * <li>CompleteArtifactImportOperation</li>
    * </ol>
    */
   public static IOperation createOperation(File sourceFile, Artifact destinationArtifact, OperationLogger logger, IArtifactExtractor extractor, IArtifactImportResolver resolver, RoughArtifactCollector collector, Collection<IArtifactType> selectionArtifactTypes, boolean stopOnError, boolean deleteUnMatched, boolean runFilterByAttributes) throws OseeCoreException {
      List<IOperation> ops = new ArrayList<IOperation>();
      ops.add(createArtifactsCompOperation(
         "Artifact Import - SourceToRoughArtifact, FilterArtifactTypesByAttributeTypes", sourceFile,
         destinationArtifact, logger, extractor, collector, selectionArtifactTypes, runFilterByAttributes));
      ops.add(createRoughToRealOperation(
         "Artifact Import - RoughToRealArtifactOperation, ArtifactValidationCheckOperation, CompleteArtifactImportOperation",
         destinationArtifact, resolver, stopOnError, collector, deleteUnMatched, null));
      return new CompositeOperation("Artifact Import - ArtifactAndRoughToRealOperation, RoughToRealOperation",
         Activator.PLUGIN_ID, ops);
   }

   /**
    * @see ArtifactImportPage
    */
   public static IOperation createArtifactsCompOperation(String opDescription, File sourceFile, Artifact destinationArtifact, OperationLogger logger, IArtifactExtractor extractor, RoughArtifactCollector collector, Collection<IArtifactType> selectionArtifactTypes, boolean runFilterByAttributes) {
      List<IOperation> ops = new ArrayList<IOperation>();
      ops.add(new SourceToRoughArtifactOperation(logger, extractor, sourceFile, collector));
      if (runFilterByAttributes) {
         ops.add(new FilterArtifactTypesByAttributeTypes(destinationArtifact.getBranch(), collector,
            selectionArtifactTypes));
      }
      return new CompositeOperation(opDescription, Activator.PLUGIN_ID, ops);
   }

   /**
    * @throws OseeCoreException
    * @see ArtifactImportWizard
    */
   public static IOperation createRoughToRealOperation(String opName, final Artifact destinationArtifact, IArtifactImportResolver resolver, boolean stopOnError, RoughArtifactCollector collector, boolean deleteUnmatchedArtifacts, IArtifactExtractor extractor) throws OseeCoreException {
      SkynetTransaction transaction =
         TransactionManager.createTransaction(destinationArtifact.getBranch(),
            "Artifact Import Wizard transaction " + opName);

      List<IOperation> ops = new ArrayList<IOperation>();
      ops.add(new RoughToRealArtifactOperation(transaction, destinationArtifact, collector, resolver,
         deleteUnmatchedArtifacts, extractor));

      final List<Artifact> children = new ArrayList<Artifact>();
      ops.add(new FetchAndAddDescendantsOperation(children, destinationArtifact));
      ops.add(new ArtifactValidationCheckOperation(children, stopOnError));
      ops.add(new CompleteArtifactImportOperation(transaction, destinationArtifact));

      return new CompositeOperation(opName, Activator.PLUGIN_ID, ops);
   }

   private static class FetchAndAddDescendantsOperation extends AbstractOperation {

      private final List<Artifact> children;
      private final Artifact destination;

      /**
       * @param children list to add result of <code>destination.getDescendants()</code> to
       * @param destination
       */
      public FetchAndAddDescendantsOperation(List<Artifact> children, Artifact destination) {
         super("Fetch and Add Descendants", Activator.PLUGIN_ID);
         this.children = children;
         this.destination = destination;
      }

      @Override
      protected void doWork(IProgressMonitor monitor) throws Exception {
         try {
            children.addAll(this.destination.getDescendants());
         } catch (OseeCoreException ex) {
            throw new OseeCoreException(String.format("Unable to get artifact children: artifact:[%s] branch:[%s]",
               this.destination.getGuid(), this.destination.getBranch().getGuid()), ex);
         }
      }
   }

}

Back to the top