Changeset 3199


Ignore:
Timestamp:
Mar 21, 2007, 10:49:04 AM (15 years ago)
Author:
dominic
Message:

New changes to fix the shifting of parameter columns

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/tab2mage_ebi/src/plugins/core/net/sf/basedb/plugins/Tab2MageExporter.java

    r3043 r3199  
    3636import java.util.Map;
    3737import java.util.Set;
     38import java.util.concurrent.ConcurrentHashMap;
    3839
    3940import net.sf.basedb.core.Affymetrix;
     41import net.sf.basedb.core.Annotatable;
    4042import net.sf.basedb.core.Annotation;
    4143import net.sf.basedb.core.AnnotationSet;
     
    5355import net.sf.basedb.core.File;
    5456import net.sf.basedb.core.Hybridization;
    55 import net.sf.basedb.core.Include;
    5657import net.sf.basedb.core.Item;
    5758import net.sf.basedb.core.ItemAlreadyExistsException;
     
    6970import net.sf.basedb.core.Sample;
    7071import net.sf.basedb.core.Scan;
    71 import net.sf.basedb.core.Type;
    7272import net.sf.basedb.core.User;
    7373import net.sf.basedb.core.plugin.About;
     
    7979import net.sf.basedb.core.plugin.Request;
    8080import net.sf.basedb.core.plugin.Response;
    81 import net.sf.basedb.core.query.Expressions;
    8281import net.sf.basedb.core.query.Hql;
    8382import net.sf.basedb.core.query.Orders;
    84 import net.sf.basedb.core.query.Restrictions;
    8583import net.sf.basedb.util.Values;
     84
    8685
    8786/**
    8887  A plugin that exports an experiment in tab2mage specification for submission to ArrayExpress public repository.
    89   @author Dominic
     88  @author Dominic Oyeniran
    9089  @version 1.0
    9190  @base.modified $Date$
     
    104103        "imported by the corresponding import plugin.",
    105104        "2.0",
    106         "2006, Base 2 development team",
     105        "2006, NutriBase development team",
    107106        null,
    108107        "oyeniran@ebi.ac.uk",
     
    114113 
    115114  private PluginParameter<String> pathParameter;
     115  private PluginParameter<String> statusPathParameter;
    116116  private PluginParameter<Experiment> experimentParameter;
    117    
    118117  private BooleanParameterType overwriteType= new BooleanParameterType(false, false);;
    119118  private PluginParameter<Boolean> overWriteParameter;
    120  
    121119  private PluginParameter<Date> releaseDateParameter;
    122  
    123120 
    124121  private RequestInformation configureJob;
     
    135132    {
    136133      pathParameter = new PluginParameter<String>(
    137           "path",
     134          "exportPath",
    138135          "Save as",
    139136          "Please specify the file name where the plugin should store it's output",
    140137          new PathParameterType(Path.Type.FILE, null, true));
     138     
     139      statusPathParameter = new PluginParameter<String>(
     140          "statusPath",
     141          "Save Status File as",
     142          "Please specify the file name where the plugin should store causes for failure and errors",
     143          new PathParameterType(Path.Type.FILE, null, true));
    141144     
    142145      experimentParameter = new PluginParameter<Experiment>(
     
    160163      List<PluginParameter<?>> parameters = new ArrayList<PluginParameter<?>>();
    161164      parameters.add(pathParameter);
     165      parameters.add(statusPathParameter);
    162166      parameters.add(experimentParameter);
    163167      parameters.add(releaseDateParameter);
     
    226230        }
    227231        storeValue(job, request, pathParameter);
     232        storeValue(job, request, statusPathParameter);
    228233        storeValue(job,request, experimentParameter);
    229234        storeValue(job,request, releaseDateParameter);
     
    280285    List<String> twoColorProtocolRefId= new LinkedList<String>();
    281286    List<String> twoColorFirstProtocolRefId= new LinkedList<String>();
    282        
     287   
     288    //pooling data strutures
     289    List<String> poolSampleHeader=new LinkedList<String>();
     290    List<String> poolSampleTail= new LinkedList<String>();
     291    List<String> poolExtractHeader=new LinkedList<String>();
     292    List<String> poolLabExtractHeader=new LinkedList<String>();
     293    List<String> poolHybDataRows=new LinkedList<String>();
     294       
    283295    boolean overwrite = false;
    284296    boolean twoColorHyb= false;
     297    //pooling attributes
     298    boolean pooledSampleFlag= false;
     299    boolean pooledExtractFlag= false;
     300    boolean pooledLabeledExtractFlag= false;
     301   
    285302    try
    286303    {
    287304      dc=sc.newDbControl();
    288305      User user = User.getById(dc, sc.getLoggedInUserId());
    289      
    290       String p = (String)job.getValue("path");
    291       if (p.startsWith("~/"))
    292       {
    293         p = "~"+user.getLogin()+p.substring(1);
    294       }
    295       Path path = new Path(p, Path.Type.FILE);   
    296306      if ((Boolean)job.getValue("overwrite") != null) overwrite = (Boolean)job.getValue("overwrite");
    297       File file = File.getByPath(dc, path, true);
    298       file.setMimeType("text/plain"); //set the type of the file
    299       if (file.isInDatabase() && !overwrite && !file.isRemoved())
    300       {
    301         throw new ItemAlreadyExistsException("File[path="+path+"]");     
    302       }
    303       else if(!file.isInDatabase())
    304       {
    305         dc.saveItem(file);
    306       }     
     307      String p = (String)job.getValue("exportPath");
     308      File file=processFilePath(user,overwrite, dc,p);     
     309      String statusp=(String)job.getValue("statusPath");
     310      File statusFile= processFilePath(user,overwrite, dc,statusp);
    307311      Experiment experiment= (Experiment)job.getValue("experiment");
    308312      experiment= Experiment.getById(dc,experiment.getId());
    309       //  check if the logged in user owned the experiment //if not return. This can be re-coded to return a message for usability
    310       if (!(experiment.getOwner().equals(user))) return;
     313      //  check if the logged in user owned the experiment, if not the export exit with a message.
     314      if (!(experiment.getOwner().equals(user)))
     315      {
     316        response.setDone("[EXPORT FAILED: User - "+user.getName()+ " do not own this experiment or have permission to export it].");
     317        return;
     318      }
     319       if (experiment.getExperimentalFactors().list(dc).size()==0)
     320      {
     321        response.setDone("[EXPORT FAILED: Experimnetal factors have not been specified for this experiment].");
     322        return; 
     323 
     324      }
     325      //intialise, count resources used, create concurrentmap for all parameter headers
     326      getResourceCounter(experiment,dc);
     327           
     328      //parameter
     329      System.out.printf("The count for extraction is : %d\n",extractionProtocolCount);
     330      System.out.printf("The count for scanning is : %d\n",scanningProtocolCount);
     331      System.out.printf("The count for hybridization is : %d\n",hybridizationProtocolCount);
    311332     
    312333      //create an output stream writer to the file
     
    314335     
    315336      Writer out= new BufferedWriter(new OutputStreamWriter(file.getUploadStream(false),"ISO-8859-1"));
    316      
     337      Writer statusOut= new BufferedWriter(new OutputStreamWriter(statusFile.getUploadStream(false),"ISO-8859-1"));
     338      statusOut.write(" Please check the messages below for the status of the export");
    317339      /*
    318340        Tab2Mage Header section
    319341       */
    320       out.write("# This file contains an experiment exported in tab2mage specification from BASE2\n\n");
     342      out.write("# This file contains an experiment exported in tab2mage specification from NutriBASE\n\n");
    321343     
    322344      /*
     
    329351      out.write("experiment_design_type\t"+ Values.getEmptyStringIfNull(experiment.getExperimentDesign())+"\n");
    330352      out.write("name\t"+experiment.getName() +"\n");
    331       String description = experiment.getDescription()!=null || experiment.getDescription()!="" ? experiment.getDescription():experiment.getAbstract();
     353      String description = experiment.getDescription()!=null && experiment.getDescription().length()!=0 ? experiment.getDescription(): Values.getEmptyStringIfNull(experiment.getAbstract()).toString();
    332354      out.write("description\t"+description +"\n");
    333355      out.write("release_date\t"+Values.getEmptyStringIfNull(job.getValue("releaseDate"))+"\n");
     
    350372      ItemQuery<RawBioAssay> rawBioAssaysQuery = experiment.getRawBioAssays();
    351373      rawBioAssaysQuery.order(Orders.asc(Hql.property("name")));
    352       ItemResultList<RawBioAssay> rawBioAssays= rawBioAssaysQuery.list(dc);     
     374      ItemResultList<RawBioAssay> rawBioAssays= rawBioAssaysQuery.list(dc);
     375      if (rawBioAssays==null || rawBioAssays.size()==0)
     376      {
     377        response.setDone("[EXPORT FAILED: Experiment - "+ experiment+ " do not have a rawbiosay specified].");
     378        return;
     379      }
    353380      for (RawBioAssay rba : rawBioAssays)
    354381      {
     382        initialiseMaps(parameterMap,true);
     383        initialiseMaps(twoColorParameterMap,true);
     384        initialiseMaps(twoColorFirstParameterMap,true);
     385        initialiseMaps(bioXterParameterMap,false);
     386       
    355387        twoColorHybDataRows.add("-done-");
    356388        /*
     
    359391            //Array Design
    360392        ArrayDesign arrayDesign= rba.getArrayDesign();
    361        
    362393        if (arrayDesign.isAffyChip())
    363394        {
     
    381412        twoColorHybDataRows.add(arrayDesign.getName());
    382413       
    383             //Raw BioAssay protocol
    384         protocolRefId.add(getFormattedProtocolId(rba.getProtocol()));
    385         twoColorFirstProtocolRefId.add(getFormattedProtocolId(rba.getProtocol()));
    386         protocolHybSectionHeader.add("Protocol[image_analysis]");
    387         protocols.add(rba.getProtocol());
    388           // rba protocol parameters
    389         if (rba.isAnnotated())
    390         {
    391           ItemQuery<Annotation> annotationsQuery = rba.getAnnotationSet().getAnnotations();
    392           annotationsQuery.include(Include.MINE,Include.IN_PROJECT, Include.SHARED);
    393           ItemResultList<Annotation> annotations= annotationsQuery.list(dc);
    394           for (Annotation annotation: annotations)
    395           {
    396             if (rba.getProtocol().isParameter(annotation.getAnnotationType()))
    397             {
    398               parameterHybSectionHeader.add("Parameter["+annotation.getAnnotationType().getName()+"]");
    399               List<?> values= annotation.getValues();
    400               parameterValues.add( values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    401               twoColorFirstParameterValues.add(values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    402              
    403             }
    404            
    405           }
    406         }
    407           //Scanning Protocol
     414          //Raw BioAssay protocol
     415        protocols.add(rba.getProtocol());
     416        if (extractionProtocolCount>0)
     417        {
     418          protocolHybSectionHeader.add("Protocol[image_analysis]");
     419          protocolRefId.add(getFormattedProtocolId(rba.getProtocol()));
     420          twoColorFirstProtocolRefId.add(getFormattedProtocolId(rba.getProtocol()));
     421        }
     422        //Protocol rbapro= rba.getProtocol() ;
     423       
     424        // rba protocol parameters
     425        if (rba.isAnnotated())   
     426          setParameterValues(rba,dc);
     427         
     428        //Scanning Protocol
    408429        Scan scan= rba.getScan();
    409         Protocol scanProtocol =scan.getProtocol();
    410         protocolRefId.add(getFormattedProtocolId(scanProtocol));
    411         twoColorFirstProtocolRefId.add(getFormattedProtocolId(scanProtocol));
    412         protocolHybSectionHeader.add("Protocol[scanning]");
    413         protocols.add(scanProtocol);  // add scanning protocol
     430        if (scanningProtocolCount>0)
     431        {
     432          protocolHybSectionHeader.add("Protocol[scanning]");
     433          protocolRefId.add(getFormattedProtocolId(scan.getProtocol()));
     434          twoColorFirstProtocolRefId.add(getFormattedProtocolId(scan.getProtocol()));
     435        }
     436        protocols.add(scan.getProtocol());  // add scanning protocol
    414437          //  Scanning protocol parameter
    415         if (scan.isAnnotated())
    416         {
    417           ItemQuery<Annotation> annotationsQuery = scan.getAnnotationSet().getAnnotations();
    418           annotationsQuery.include(Include.MINE,Include.IN_PROJECT, Include.SHARED);
    419           ItemResultList<Annotation> annotations= annotationsQuery.list(dc);
    420           for (Annotation annotation: annotations)
    421           {
    422             if (scanProtocol.isParameter(annotation.getAnnotationType()))
    423             {
    424               parameterHybSectionHeader.add("Parameter["+annotation.getAnnotationType().getName()+"]");
    425               List<?> values= annotation.getValues();
    426               parameterValues.add( values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    427               twoColorFirstParameterValues.add(values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    428              
    429             }
    430            
    431           }
    432         }
     438        if (scan.isAnnotated()) setParameterValues(scan,dc);
     439       
    433440          //Hybridization
    434441        Hybridization hyb= scan.getHybridization();
    435         hybSectionHeader.add("Array[serial]");
    436         hybridizationDataRows.add(hyb.getArraySlide().getName());
    437         twoColorHybDataRows.add(hyb.getArraySlide().getName());     
     442        if (hyb.getArraySlide()==null)
     443        {   
     444          response.setError("[Export Failed] please add an array slide for Hybridization:"+hyb.getName(), Arrays.asList(new Throwable()));
     445          statusOut.write("[Export Failed] please add an array slide for Hybridization:"+ hyb.getName());
     446          return;
     447        }
     448        else
     449        {
     450          hybSectionHeader.add("Array[serial]");
     451          hybridizationDataRows.add(hyb.getArraySlide().getName());
     452          twoColorHybDataRows.add(hyb.getArraySlide().getName());
     453        }
     454         
    438455        /*
    439456          Names of materials and processes section
     
    444461       
    445462        System.out.println("The number of scans: "+hyb.countScans()); // count scans that created the hyb
    446         BioMaterialEvent bioMaterialEvent= hyb.getCreationEvent(); // event that created the hyridization
     463        BioMaterialEvent bioMaterialEvent= hyb.getCreationEvent(); // an event that created the hyridization
    447464       
    448465        Protocol hybProtocol= bioMaterialEvent.getProtocol(); //hybridization protocol
    449466        protocols.add(hybProtocol);
    450         protocolRefId.add(getFormattedProtocolId(hybProtocol));
    451         twoColorFirstProtocolRefId.add(getFormattedProtocolId(hybProtocol));
    452         protocolHybSectionHeader.add("Protocol[hybridization]");
     467       
     468        if (hybridizationProtocolCount>0)
     469        {
     470          protocolHybSectionHeader.add("Protocol[hybridization]");
     471          protocolRefId.add(getFormattedProtocolId(hybProtocol));
     472          twoColorFirstProtocolRefId.add(getFormattedProtocolId(hybProtocol));
     473        }
    453474        //  Hybridization protocol parameter
    454         if (hyb.isAnnotated())
    455         {
    456           ItemQuery<Annotation> annotationsQuery = hyb.getAnnotationSet().getAnnotations();
    457           annotationsQuery.include(Include.MINE,Include.IN_PROJECT, Include.SHARED);
    458           ItemResultList<Annotation> annotations= annotationsQuery.list(dc);
    459           for (Annotation annotation: annotations)
    460           {
    461             if (hybProtocol.isParameter(annotation.getAnnotationType()))
    462             {
    463               parameterHybSectionHeader.add("Parameter["+annotation.getAnnotationType().getName()+"]");
    464               List<?> values= annotation.getValues();
    465               parameterValues.add( values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    466               twoColorFirstParameterValues.add(values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    467                
    468             }
    469           }
    470         }
     475        if (hyb.isAnnotated()) setParameterValues(hyb,dc);
    471476         
    472477        ItemQuery<LabeledExtract> labeledExtractQuery =(ItemQuery<LabeledExtract>) bioMaterialEvent.getSources(); // get all the labeled extract
     
    476481        for (LabeledExtract labeledExtract :labeledExtracts) // can have more than one labeled extract (2 color experiments)
    477482        {
    478             //  labeled extract
     483          //  labeled extract
    479484          hybSectionHeader.add("LabeledExtract");
    480           protocolHybSectionHeader.add("Protocol[labeling]");
    481485          Protocol lbExtractProtocol= labeledExtract.getCreationEvent().getProtocol();
    482486          protocols.add(lbExtractProtocol); // labeled extract protocol
     487          if (labelingProtocolCount>0)protocolHybSectionHeader.add("Protocol[labeling]");
    483488          if (count<hybsize || count==1)
    484489          {
    485490            hybridizationDataRows.add(labeledExtract.getName());
    486             protocolRefId.add(getFormattedProtocolId(lbExtractProtocol));
     491            if (labelingProtocolCount>0) protocolRefId.add(getFormattedProtocolId(lbExtractProtocol));
    487492          }
    488493          else if (count==2)
     
    490495            twoColorHyb=true;
    491496            twoColorHybDataRows.add(labeledExtract.getName());
    492             twoColorProtocolRefId.add(getFormattedProtocolId(lbExtractProtocol));
     497            if (labelingProtocolCount>0)twoColorProtocolRefId.add(getFormattedProtocolId(lbExtractProtocol));
    493498          }
    494499            //  labelling protocol parameter
    495           AnnotationSet lbas = labeledExtract.isAnnotated()?labeledExtract.getAnnotationSet(): null;
    496           ItemResultList<AnnotationType> lbprotocolParameters= getProtocolParameters(dc,lbExtractProtocol);
    497           if (lbprotocolParameters!=null )
    498           {
    499             if (lbprotocolParameters.size()!=0)
    500             {
    501               for( AnnotationType parameter: lbprotocolParameters)
     500          setParameterValues(labeledExtract,dc, count, hybsize);
     501         
     502          // Label
     503          String labelName= labeledExtract.getLabel().getName(); // the name of the label
     504          hybSectionHeader.add("Dye");
     505          if (count < hybsize || count==1)
     506          {
     507            hybridizationDataRows.add(labelName);
     508          }
     509          else if (count==2)
     510          {
     511            twoColorHybDataRows.add(labelName);
     512          }
     513         
     514          //  Extract
     515          Extract extract= labeledExtract.getExtract();
     516          if (extract!=null)
     517          {
     518            hybSectionHeader.add("Extract");
     519            Protocol extractProtocol =extract.getCreationEvent().getProtocol(); //extract protocol
     520            if (extractProtocolCount>0) protocolHybSectionHeader.add("Protocol[extraction]");
     521            protocols.add(extractProtocol);
     522            if (count < hybsize || count==1)
     523            {
     524              hybridizationDataRows.add(extract.getName());
     525              if (extractProtocolCount>0)protocolRefId.add(getFormattedProtocolId(extractProtocol));
     526            }
     527            else if (count==2)
     528            {
     529              twoColorHybDataRows.add(extract.getName());
     530              if (extractProtocolCount>0)twoColorProtocolRefId.add(getFormattedProtocolId(extractProtocol));
     531            }
     532              //  extraction protocol parameter
     533            setParameterValues(extract,dc,count,hybsize);
     534          }
     535         
     536            //Sample
     537          Set<Annotatable> sampleOrPooledExtract= extract.getAnnotatableParents();// Get the sample or pooled extracts.
     538          System.out.println("The no of sample or pooled extract is :" +sampleOrPooledExtract.size());
     539          for (Annotatable item: sampleOrPooledExtract)
     540          {
     541            System.out.println(item instanceof Sample? "[yes] "+item.getType().name()+" is a Sample":" [No] it is an Extract");
     542            item.getProtocol();
     543          }
     544       
     545          Sample sample =extract.getSample(); // The sample, extract is created from
     546          if (sample != null)
     547          {
     548            hybSectionHeader.add("Sample");
     549           
     550            Protocol sampleProtocol=sample.getCreationEvent().getProtocol();    //sampling protocol
     551            if (samplingProtocolCount>0)protocolHybSectionHeader.add("Protocol[treatment]");
     552            protocols.add(sampleProtocol);
     553            if (count < hybsize || count==1)
     554            {
     555              hybridizationDataRows.add(sample.getName());
     556              if (samplingProtocolCount>0)protocolRefId.add(getFormattedProtocolId(sampleProtocol));
     557            }
     558            else if (count==2)
     559            {
     560              twoColorHybDataRows.add(sample.getName());
     561              if (samplingProtocolCount>0) twoColorProtocolRefId.add(getFormattedProtocolId(sampleProtocol));
     562            }
     563              // sampling protocol parameter
     564            setParameterValues(labeledExtract,dc,count,hybsize);
     565          }
     566            // Biosource
     567          Set<BioSource> bioSources= new LinkedHashSet();
     568          if (sample.isPooled())
     569          {
     570            pooledSampleFlag=true;
     571            poolSampleHeader.addAll(hybridizationDataRows);
     572            Set<Annotatable> pooledSamples= sample.getAnnotatableParents();
     573            int pooledSize = pooledSamples.size();
     574            for (Annotatable pooledSample: pooledSamples) //pooled samples
     575            {
     576              if (pooledSample instanceof Sample)
    502577              {
    503                 parameterHybSectionHeader.add("Parameter["+parameter.getName()+"]");
    504                 List<?> values = lbas == null || !lbas.hasAnnotation(parameter) ? null : lbas.getAnnotation(parameter).getValues();
    505                 if (count < hybsize || count==1)
     578               
     579                Set<Annotatable> biosources= pooledSample.getAnnotatableParents();
     580                for (Annotatable biosourceItem: biosources)
    506581                {
    507                   parameterValues.add( values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    508                  
    509                 }
    510                 else if(count==2)
    511                 {
    512                   twoColorParameterValues.add(values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    513                  
     582                  System.out.println(biosourceItem instanceof BioSource ? "[yes] "+ biosourceItem.getType().name()+" is a BioSource":" [No] it is not");
     583                  BioSource biosource= BioSource.getById(dc, biosourceItem.getId());
     584                  System.out.println("The Biosouce name is : "+ biosource.getName());
     585                  bioSources.add(biosource);
    514586                }
    515587              }
    516             }
    517           }
    518             // Label
    519           String labelName= labeledExtract.getLabel().getName(); // the name of the label
    520           hybSectionHeader.add("Dye");
    521           if (count < hybsize)
    522           {
    523             hybridizationDataRows.add(labelName);
    524           }
    525           else if (count==2)
    526           {
    527             twoColorHybDataRows.add(labelName);
    528           }
    529             //  Extract
    530           Extract extract= labeledExtract.getExtract();
    531           if (extract!=null)
    532           {
    533             hybSectionHeader.add("Extract");
    534             protocolHybSectionHeader.add("Protocol[extraction]");
    535             Protocol extractProtocol =extract.getCreationEvent().getProtocol(); //extract protocol
    536             protocols.add(extractProtocol);
    537             if (count < hybsize || count==1)
    538             {
    539               hybridizationDataRows.add(extract.getName());
    540               protocolRefId.add(getFormattedProtocolId(extractProtocol));
    541             }
    542             else if (count==2)
    543             {
    544               twoColorHybDataRows.add(extract.getName());
    545               twoColorProtocolRefId.add(getFormattedProtocolId(extractProtocol));
    546             }
    547               //  extraction protocol parameter
    548             AnnotationSet as = extract.isAnnotated()? extract.getAnnotationSet(): null;
    549             ItemResultList<AnnotationType> protocolParameters= getProtocolParameters(dc,extractProtocol);
    550             if (protocolParameters!=null )
    551             {
    552               if (protocolParameters.size()!=0)
     588              else
    553589              {
    554                 for( AnnotationType parameter: protocolParameters)
     590                // the pooled sample is a biosource
     591                // this should not happen because biosource cannot be pooled to create sample.
     592              }
     593            }   
     594          }
     595          else if (!sample.isPooled())
     596          {
     597            bioSources.add(sample.getBioSource());
     598          }
     599          int bioSourceCount=1;
     600          for (BioSource bioSource: bioSources)
     601          {
     602            if (bioSource!=null)
     603            {
     604              hybSectionHeader.add("Biosource");
     605              if (count < hybsize || count==1)
     606              {
     607                if (bioSourceCount==1) // this caters for the the first Biosource for pooling and non pooling
    555608                {
    556                   parameterHybSectionHeader.add("Parameter["+parameter.getName()+"]");
    557                   List<?> values = as == null || !as.hasAnnotation(parameter) ? null : as.getAnnotation(parameter).getValues();
     609                  hybridizationDataRows.add(bioSource.getName());
     610                }
     611                else if (pooledSampleFlag && bioSourceCount>1) // this cater for other biources when samples were pooled
     612                {
     613                  poolSampleTail.add(bioSource.getName());
     614                }
     615              }
     616              else if(count==2)
     617              {
     618                twoColorHybDataRows.add(bioSource.getName());
     619                if (pooledSampleFlag && bioSourceCount>1) poolSampleTail.add(bioSource.getName());
     620              }
     621           
     622              List<Annotation> annotations = bioSource.getAnnotationSet().getAnnotations().list(dc);
     623              for (Annotation annotation: annotations)
     624              {
     625                AnnotationType at=annotation.getAnnotationType();
     626                if(!at.isRemoved())
     627                {
     628                  //hybSectionHeader.add("BioMaterialCharacteristics["+at.getName()+"]");
     629                  List<?> values= annotation==null? null:annotation.getValues();
    558630                  if (count < hybsize || count==1)
    559631                  {
    560                     parameterValues.add( values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    561                    
     632                    if (bioSourceCount==1) // this caters for the the first Biosource for pooling and non pooling
     633                    {
     634                      for (String header : bioXterParameterMap.keySet())
     635                      {
     636                        if (header.equals(annotation.getAnnotationType().getName()))
     637                        {
     638                          bioXterParameterMap.replace(header, values==null || values.size()==0 ? getDefaultValue(at) : Values.getString(values, ", ", true));
     639                        }
     640                      }
     641                      //displayMaps(bioXterParameterMap);
     642                      //hybridizationDataRows.add(values==null || values.size()==0 ? getDefaultValue(at) : Values.getString(values, ", ", true));
     643                      //System.out.println(values==null || values.size()==0 ? "-none-" : Values.getString(values, ", ", true));
     644                    }
     645                    else if (pooledSampleFlag && bioSourceCount>1) // this cater for other biources when samples were pooled
     646                    {
     647                      poolSampleTail.add(values==null || values.size()==0 ? getDefaultValue(at) : Values.getString(values, ", ", true));
     648                      //System.out.println(values==null || values.size()==0 ? "-none-" : Values.getString(values, ", ", true));
     649                    }
    562650                  }
    563651                  else if(count==2)
    564652                  {
    565                     twoColorParameterValues.add(values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    566                    
     653                    twoColorHybDataRows.add(values==null || values.size()==0 ? getDefaultValue(at) : Values.getString(values, ", ", true));
     654                    //System.out.println(values==null || values.size()==0 ? "-none-" : Values.getString(values, ", ", true));
     655                    if (pooledSampleFlag && bioSourceCount>1) poolSampleTail.add(values==null || values.size()==0 ? getDefaultValue(at) : Values.getString(values, ", ", true));
    567656                  }
    568657                }
    569658              }
    570659            }
    571           }
    572          
    573             //Sample
    574           Sample sample =extract.getSample(); // The sample, extract is created from
    575           if (sample != null)
    576           {
    577             hybSectionHeader.add("Sample");
    578             protocolHybSectionHeader.add("Protocol[treatment]");
    579             Protocol sampleProtocol=sample.getCreationEvent().getProtocol();    //sampling protocol
    580             protocols.add(sampleProtocol);
    581             if (count < hybsize || count==1)
    582             {
    583               hybridizationDataRows.add(sample.getName());
    584               protocolRefId.add(getFormattedProtocolId(sampleProtocol));
    585             }
    586             else if (count==2)
    587             {
    588               twoColorHybDataRows.add(sample.getName());
    589               twoColorProtocolRefId.add(getFormattedProtocolId(sampleProtocol));
    590             }
    591               // sampling protocol parameter
    592             AnnotationSet as = sample.isAnnotated()? sample.getAnnotationSet(): null;
    593             ItemResultList<AnnotationType> protocolParameters= getProtocolParameters(dc,sampleProtocol);
    594             if (protocolParameters!=null )
    595             {
    596               if (protocolParameters.size()!=0)
    597               {
    598                 for( AnnotationType parameter: protocolParameters)
    599                 {
    600                   parameterHybSectionHeader.add("Parameter["+parameter.getName()+"]");
    601                   List<?> values = as == null || !as.hasAnnotation(parameter) ? null : as.getAnnotation(parameter).getValues();
    602                  
    603                   if (count < hybsize || count==1)
    604                   {
    605                     parameterValues.add( values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    606                    
    607                   }
    608                   else if(count==2)
    609                   {
    610                     twoColorParameterValues.add(values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    611                    
    612                   }
    613                 }
    614               }
    615             }
    616           }
    617             // Biosource
    618           BioSource bioSource=sample.getBioSource();
    619           if (bioSource!=null)
    620           {
    621             hybSectionHeader.add("Biosource");
    622             if (count < hybsize || count==1)
    623             {
    624               hybridizationDataRows.add(bioSource.getName());
    625             }
    626             else if(count==2)
    627             {
    628               twoColorHybDataRows.add(bioSource.getName());
    629             }
    630             AnnotationSet bsAnnotationSet = bioSource.isAnnotated()? bioSource.getAnnotationSet():null;
    631             ItemQuery<AnnotationType> annotationTypesQuery= getAnnotationTypesQuery(bioSource.getType(), false); // returns no annotationtypes for parameters
    632             List<AnnotationType> annotationTypes= annotationTypesQuery.list(dc);
    633             System.out.println("Biomaterial Xteristics");
    634             for (AnnotationType at : annotationTypes)
    635             {
    636               if(!at.isRemoved() )
    637               {
    638                 hybSectionHeader.add("BioMaterialCharacteristics["+at.getName()+"]");
    639                 List<?> values =  bsAnnotationSet == null || ! bsAnnotationSet.hasAnnotation(at) ? null :  bsAnnotationSet.getAnnotation(at).getValues();
    640                 if (count < hybsize || count==1)
    641                 {
    642                   hybridizationDataRows.add(values==null || values.size()==0 ? getDefaultValue(at) : Values.getString(values, ", ", true));
    643                  
    644                 }
    645                 else if(count==2)
    646                 {
    647                   twoColorHybDataRows.add(values==null || values.size()==0 ? getDefaultValue(at) : Values.getString(values, ", ", true));
    648                  
    649                 }
    650               }
    651             }
     660            if (pooledSampleFlag && bioSourceCount>1) poolSampleTail.add("--*poolend*--");
     661            System.out.println( bioSourceCount>1? "The [" +bioSourceCount+ "] nd BioSource, poolend added": "The [" +bioSourceCount+ "] st BioSource");
     662            bioSourceCount++;
     663           
    652664          }
    653665          System.out.println("The count before increament is :" +count);
     
    656668        } //end of labeled extract loop
    657669       
    658           // add protocol hyb ref ids
     670        /*
     671          Populate the Hyb data row before display
     672         */
     673        displayMaps(bioXterParameterMap);
     674        for (Map.Entry<String, String> e: bioXterParameterMap.entrySet())
     675        {
     676          hybridizationDataRows.add(e.getValue());
     677          bioXterHybSectionHeader.add(e.getKey());
     678        }
     679        // add protocol hyb ref ids
    659680        for (String protcolId : protocolRefId) //add protocol id
    660681        {
    661682          hybridizationDataRows.add(protcolId);
    662683        }
     684       
    663685        if (twoColorHyb)
    664686        {
     
    670692        }
    671693          //  add parameter values
    672         for (String paramValue : parameterValues )
    673         {
    674           hybridizationDataRows.add(paramValue);
    675         }
     694        //for (String paramValue : parameterValues )  removed temporarily
     695        for (Map.Entry<String, String> entry: parameterMap.entrySet())
     696        {
     697          hybridizationDataRows.add(entry.getValue());
     698          parameterHybSectionHeader.add(entry.getKey());
     699        }
     700        //for (String paramValue: parameterMap.values())
     701        //{
     702        //  hybridizationDataRows.add(paramValue);
     703        //}
     704       
    676705        if (twoColorHyb)
    677706        {
    678           twoColorFirstParameterValues.addAll(twoColorParameterValues);
    679           for (String paramValue : twoColorFirstParameterValues  )
     707          for (Map.Entry<String, String> firstMapE :twoColorFirstParameterMap.entrySet())
     708          {
     709            for (Map.Entry<String, String> mapE :twoColorParameterMap.entrySet())
     710            {
     711              if (firstMapE.getKey().equals(mapE.getKey()))
     712              {
     713                twoColorFirstParameterMap.replace(firstMapE.getKey(), firstMapE.getValue()==""? mapE.getValue():"" ) ;
     714              }
     715            }
     716          }
     717          System.out.println("++++ The two color parameter map after combining them together is : ++++");
     718          displayMaps(twoColorFirstParameterMap);
     719         
     720          //twoColorFirstParameterValues.addAll(twoColorParameterValues);
     721          //for (String paramValue : twoColorFirstParameterValues  )
     722         
     723          for (String paramValue : twoColorFirstParameterMap.values())
    680724          {
    681725            twoColorHybDataRows.add(paramValue);
     
    691735          if (value!=null)
    692736          {
     737            factorValuesHybSectionHeader.add("FactorValue["+value.getAnnotationType().getName()+"]");
    693738            List<?> values= value.getValues();
    694             hybridizationDataRows.add(values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
    695             if (twoColorHyb) twoColorHybDataRows.add(values==null || values.size()==0 ? "\t" : Values.getString(values, ", ", true));
     739            hybridizationDataRows.add(values==null || values.size()==0 ? "" : Values.getString(values, ", ", true));
     740            if (twoColorHyb) twoColorHybDataRows.add(values==null || values.size()==0 ? "" : Values.getString(values, ", ", true));
    696741          }
    697742          else
    698743          {
    699             hybridizationDataRows.add("\t");
    700             if (twoColorHyb) twoColorHybDataRows.add("\t");
     744            hybridizationDataRows.add("");
     745            if (twoColorHyb) twoColorHybDataRows.add("");
    701746          }
    702747        }
    703748       
    704749        if (twoColorHyb)hybridizationDataRows.addAll(twoColorHybDataRows);
     750       
     751        if (pooledSampleFlag)
     752        {
     753          poolHybDataRows.addAll(poolSampleHeader);
     754          System.out.println("The poolSampleTail size is : "+ poolSampleTail.size());
     755          for (int i=0; i<poolSampleTail.size(); i++)
     756          {
     757            System.out.println("The context of poolSampleTail at ["+i+"] is -- "+poolSampleTail.get(i));
     758            if (poolSampleTail.get(i)!="--*poolend*--")
     759            {
     760              poolHybDataRows.add(poolSampleTail.get(i));
     761            }
     762            else if (poolSampleTail.get(i).equals("--*poolend*--"))
     763            {
     764              poolHybDataRows.add("-done-");
     765              System.out.println("The value of i= : "+ i);
     766              int lastIndex= poolSampleTail.size()-1;
     767              System.out.println("The inserted index is :" +lastIndex );
     768              String lastValue= poolSampleTail.get(lastIndex);
     769              System.out.println("The value at the last Index:" +lastValue);
     770              if (lastValue=="--*poolend*--" && i<lastIndex)
     771              {
     772                System.out.println("Now adding a new  pool header after poolend");
     773                poolHybDataRows.addAll(poolSampleHeader);
     774              }
     775            }         
     776          }
     777        }
    705778        // clear all necessary data holder for reuse
     779        parameterMap.clear();
     780        twoColorParameterMap.clear();
     781        twoColorFirstParameterMap.clear();
     782        bioXterParameterMap.clear();
    706783        protocolRefId.clear();
    707784        parameterValues.clear();
     
    711788        twoColorFirstProtocolRefId.clear();
    712789        twoColorProtocolRefId.clear();
     790       
    713791        if (!twoColorHybDataRows.isEmpty())
    714792        {
     
    716794          twoColorHyb=false;
    717795        }
     796       
     797        poolSampleHeader.clear();
     798        poolSampleTail.clear();
     799       
    718800        hybridizationDataRows.add("-done-");
    719801        System.out.println("done - end of rawbioassay :" + rba.getName());
    720802      }// end of raw biossay for loop
    721803     
     804      for (String bioXterHeader: bioXterHybSectionHeader)
     805      {
     806        hybSectionHeader.add("BioMaterialCharacteristics["+bioXterHeader+"]");
     807      }
    722808      for (String protocolHeader: protocolHybSectionHeader)
    723809      {
    724810        hybSectionHeader.add(protocolHeader);
    725811      }
    726       for (String parameterHeader :parameterHybSectionHeader)
    727       {
    728         hybSectionHeader.add(parameterHeader);
     812//      for (String parameterHeader : newParameterHybSectionHeader)s
     813      for (String parameterHeader :parameterHybSectionHeader) //temporarily removed
     814      {
     815        hybSectionHeader.add("Parameter["+parameterHeader+"]");
    729816      }
    730817      for (String factorValueHeader :factorValuesHybSectionHeader)
     
    769856       */
    770857      out.write("Hybridization section \n"); 
    771         //header
     858        //headers
    772859      for (String header:hybSectionHeader)
    773860      {
     
    789876      }
    790877      out.write("\n");
    791    
     878      //the values for the Pooling
     879      for (String poolRow: poolHybDataRows )
     880      {
     881        if (poolRow!="-done-")
     882        {
     883          out.write(poolRow+"\t");
     884        }
     885        else if("-done-".equals(poolRow))
     886        {
     887          out.write("\n");
     888        }
     889      }
     890     
     891      //testing the new header
     892      //statusOut.write("\n");
     893      //for (String header : newParameterHybSectionHeader)
     894      //{
     895      //  statusOut.write(header+"\t");
     896      //}
     897      //statusOut.write("\n");
     898      //for (String values: parameterMap.values())
     899      //{
     900      //  statusOut.write(values+"\t");
     901    //  }
     902     
    792903      out.flush();
    793904      out.close();
     905      statusOut.close();
    794906      dc.commit();
    795907      response.setDone("Experiment " + experiment.getName() + " exported successfully");
     
    802914    {
    803915      if (dc != null) dc.close();
     916      scanningProtocolCount=0;
     917      extractionProtocolCount=0;
     918      hybridizationProtocolCount=0;
     919      labelingProtocolCount=0;
     920      extractProtocolCount=0;
     921      samplingProtocolCount=0;
     922      newParameterHybSectionHeader.clear();
     923      bioMatXteristicsHeader.clear();
     924      factorValuesHybSectionHeader.clear();
     925      parameterHybSectionHeader.clear();
    804926    }       
    805927  }
     928 
     929 
    806930  /**
     931    [TODO] FAIL WHEN THE EXPORT IS RUN WITHOUT EXPERIMENTAL FACTORS. FORCE USERS TO INPUT EXPRIMENTAL FACTORS
    807932     get all the experimental factors for an experiments
    808933     @param DcControl dc, the database control
     
    814939  {
    815940    List<Annotation> values= new LinkedList<Annotation>();
    816     ItemQuery<AnnotationType> experimentalFactorsQuery= experiment.getExperimentalFactors();
    817     experimentalFactorsQuery.include(Include.MINE,Include.IN_PROJECT, Include.SHARED, Include.OTHERS);
    818     ItemResultList<AnnotationType> experimentalFactors = experimentalFactorsQuery.list(dc);
    819     for (AnnotationType exprFactor :experimentalFactors) //create the expr factor value for this experiment, obtaining annotations from rawbioassay
    820     {
    821       factorValuesHybSectionHeader.add("FactorValue["+exprFactor.getName()+"]");
    822       AnnotationSet annotationSet = rba.isAnnotated() ? rba.getAnnotationSet() : null;
    823       if (annotationSet!=null)
    824       {
    825         values.add(annotationSet.findAnnotation(exprFactor));
    826       }         
    827     }
     941    AnnotationSet annotationSet = rba.isAnnotated() ? rba.getAnnotationSet() : null;
     942    ItemResultList<AnnotationType> experimentalFactors = experiment.getExperimentalFactors().list(dc);
     943    if (annotationSet!=null)
     944    {
     945      ItemResultList<Annotation> annotations=annotationSet.getAnnotations().list(dc);
     946      for (Annotation annotation: annotations)
     947      {
     948        for (AnnotationType exprFactor :experimentalFactors)
     949        {
     950          if (exprFactor.equals(annotation.getAnnotationType())&& !exprFactor.isRemoved())
     951          {
     952            //factorValuesHybSectionHeader.add("FactorValue["+exprFactor.getName()+"]");
     953            values.add(annotation);
     954          }
     955        }
     956      }
     957    }
     958    //for (AnnotationType exprFactor :experimentalFactors) //create the expr factor value for this experiment, obtaining annotations from rawbioassay
     959    //{
     960    //  if (!exprFactor.isRemoved())
     961    //  {
     962    //    factorValuesHybSectionHeader.add("FactorValue["+exprFactor.getName()+"]");
     963    //    //AnnotationSet annotationSet = rba.isAnnotated() ? rba.getAnnotationSet() : null;
     964    //    if (annotationSet!=null)
     965    //    {
     966    //      values.add(annotationSet.getAnnotation(exprFactor));
     967    //    }
     968    //  }
     969    //}
    828970    return values;
    829971  }
     972 
    830973  /**
    831     Gets the base format id for the protocol, if protocol is null and tab string is returned
    832     this is required to have consistent tab delimeted format
     974    Gets the base format id for the protocol, if protocol is null an empty string is returned
     975    this is required to have consistent tab delimited format
    833976    @param protocol, the protocol used in the experiment
    834     @return protocol id, a tab is returned when the protocol is null
     977    @return protocol id, an empty string is returned when the protocol is null
    835978   */
    836979  private static String getFormattedProtocolId (Protocol protocol)
    837980  {
    838     String tab="\t";
     981    String tab="";
    839982    String protocolId;
    840983    if (protocol!=null)
     
    849992  }
    850993  /**
    851     Gets the protocol prameter list for a given Protocol, if protocol is null and tab string is returned
    852     this is required to have consistent tab delimeted format
    853     @param dc, the dbcontrol object
    854     @param protocol, the protocol used in the experiment
    855     @return values, list of protocol parameters, a null is returned when the protocol is null
    856    */
    857  
    858   private static ItemResultList<AnnotationType> getProtocolParameters(DbControl dc, Protocol protocol )
    859   {
    860     System.out.println("Entering getProtocolParameter method");
    861     ItemResultList<AnnotationType> protocolParameters=null;
    862     if (protocol!=null)
    863     {
    864       ItemQuery<AnnotationType> protocolParametersQuery = protocol.getParameters();
    865       protocolParametersQuery.include(Include.MINE,Include.IN_PROJECT, Include.SHARED);
    866       protocolParameters=protocolParametersQuery.list(dc);
    867     }
    868     return protocolParameters;
    869    
     994    add more commenets and annnotations later
     995      @param experiment
     996   */
     997  @SuppressWarnings({"deprecation","unchecked"})
     998  private static void getResourceCounter(Experiment experiment,DbControl dc)
     999  {
     1000    ItemResultList<RawBioAssay> rbas= experiment.getRawBioAssays().list(dc);
     1001    for (RawBioAssay rba : rbas)
     1002    {
     1003      if (rba.getProtocol()!=null)
     1004      {
     1005        extractionProtocolCount++ ;
     1006        getParameterSectionHeader(rba, dc );
     1007      }
     1008      if (rba.getScan().getProtocol()!=null)
     1009      {
     1010        scanningProtocolCount++;
     1011        getParameterSectionHeader(rba.getScan(), dc );
     1012      }
     1013      if (rba.getScan().getHybridization().getProtocol()!=null)
     1014      {
     1015        hybridizationProtocolCount++;
     1016        getParameterSectionHeader(rba.getScan().getHybridization(), dc );
     1017      }
     1018      ItemResultList<LabeledExtract>labeledExtracts = (ItemResultList<LabeledExtract>)
     1019                              rba.getScan().getHybridization().getCreationEvent().getSources().list(dc);
     1020      for (LabeledExtract labeledExtract :labeledExtracts)
     1021      {
     1022        if (labeledExtract.getProtocol()!=null)
     1023        {
     1024          labelingProtocolCount++;
     1025          getParameterSectionHeader(labeledExtract, dc );
     1026        }
     1027        if (labeledExtract.getExtract().getProtocol()!=null)
     1028        {
     1029          extractProtocolCount++;
     1030          getParameterSectionHeader(labeledExtract.getExtract(), dc );
     1031        }
     1032        if  (labeledExtract.getExtract().getSample().getProtocol()!=null)
     1033        {
     1034          samplingProtocolCount++;
     1035          getParameterSectionHeader(labeledExtract.getExtract().getSample(), dc );
     1036        }
     1037        if (labeledExtract.getExtract().getSample().getBioSource()!=null)
     1038        setAllBioMatXteristicsHeader(labeledExtract.getExtract().getSample().getBioSource(),dc);
     1039      }
     1040    }
    8701041  }
    8711042  /**
    872   Get a query that returns all annotation types defined for a particular
    873   item type and, optionally, with a specific protocol parameter setting.
    874   @param itemType The item type
    875   @param isProtocolParameter, true to include assigned as protocol parameters
    876   and false to exclude prortocol parameters, a null value ignores the protocol parameter flag
    877   @return An <code>ItemQuery</code> object of annotation types
    878 */
    879   private static ItemQuery<AnnotationType> getAnnotationTypesQuery(Item itemType, Boolean isProtocolParameter)
    880   {
    881     ItemQuery<AnnotationType> q = AnnotationType.getQuery(itemType);
    882     q.order(Orders.asc(Hql.property("name")));
    883     q.include(Include.MINE, Include.SHARED, Include.IN_PROJECT);
    884     if (isProtocolParameter != null)
    885     {
    886       q.restrict(
    887         Restrictions.eq(
    888           Hql.property("protocolParameter"),
    889           Expressions.parameter("isParameter", isProtocolParameter, Type.BOOLEAN)
    890         )
    891       );
    892     }
    893     return q;
    894   }
    895  
     1043    Get new parameter section header method
     1044    [TODO] add more comments later and anotations
     1045   */
     1046 
     1047  private static void getParameterSectionHeader(Annotatable anotatable, DbControl dc )
     1048  {
     1049    ItemResultList<Annotation> annotations = anotatable.getAnnotationSet().getAnnotations().list(dc);
     1050    for (Annotation annotation: annotations)
     1051    {
     1052     
     1053      if (anotatable.getProtocol().isParameter(annotation.getAnnotationType()) && !annotation.getAnnotationType().isRemoved())
     1054        newParameterHybSectionHeader.add(annotation.getAnnotationType().getName());
     1055    }
     1056  }
     1057/**
     1058 [TODO] ANNOTATE THIS METHOD
     1059 * @param anotatable
     1060 * @param dc
     1061 */
     1062 
     1063  private static void setAllBioMatXteristicsHeader(Annotatable anotatable, DbControl dc)
     1064  {
     1065    List<Annotation> annotations = anotatable.getAnnotationSet().getAnnotations().list(dc);
     1066    for (Annotation annotation: annotations)
     1067    {
     1068      AnnotationType at=annotation.getAnnotationType();
     1069      if(!at.isRemoved())
     1070        bioMatXteristicsHeader.add(at.getName());
     1071    }
     1072    System.out.println("+++++ List all biomaterial xteristics header  +++++");
     1073    for (String bioxter : bioMatXteristicsHeader)
     1074    {
     1075      System.out.println(bioxter+"\n");
     1076    }
     1077  }
     1078 
     1079  /**
     1080    [TODO]
     1081    Add ANNOTATIONS TO THIS METHOD  AS WELL
     1082   */
     1083   
     1084  private static void initialiseMaps(ConcurrentHashMap<String,String> map, boolean isForParameter)
     1085  {
     1086    if (map.isEmpty())
     1087    {
     1088      if (isForParameter)
     1089      {
     1090        for (String param: newParameterHybSectionHeader)
     1091        {
     1092          if (param!=null) map.put(param, "");
     1093        }
     1094      }
     1095      else if (!isForParameter)
     1096      {
     1097        for (String bioXterParam: bioMatXteristicsHeader)
     1098        {
     1099          if (bioXterParam!=null) map.put(bioXterParam, "");
     1100        }
     1101      }
     1102    }
     1103    else
     1104    {
     1105      System.out.println("Sorry, " + map + "is not cleared yet");
     1106    }
     1107  }
     1108  /**
     1109   [TODO] Add annotation and comments
     1110   overloaded method: setParameterValues
     1111   */
     1112  private static void setParameterValues(Annotatable anotatable, DbControl dc)
     1113  {
     1114    ItemResultList<Annotation> annotations = anotatable.getAnnotationSet().getAnnotations().list(dc);
     1115    for (Annotation annotation: annotations)
     1116    {
     1117      if (anotatable.getProtocol()!=null) // only check if the annotation is not null, watch this!
     1118      {   
     1119        if (anotatable.getProtocol().isParameter(annotation.getAnnotationType()) && !annotation.getAnnotationType().isRemoved())
     1120        {
     1121          //parameterHybSectionHeader.add("Parameter["+annotation.getAnnotationType().getName()+"]");
     1122          List<?> values= annotation.getValues();
     1123          for (String header : parameterMap.keySet())
     1124          {
     1125            if (header.equals(annotation.getAnnotationType().getName()))
     1126            {
     1127              System.out.println("The header is: "+ header);
     1128              parameterMap.replace(header, "", values==null || values.size()==0 ? "" : Values.getString(values, ", ", true));
     1129            }
     1130          }
     1131          for (String header : twoColorFirstParameterMap.keySet())
     1132          {
     1133            if (header.equals(annotation.getAnnotationType().getName()))
     1134            {
     1135              System.out.println("The header for twocolor first parameter map is: "+ header);
     1136              twoColorFirstParameterMap.replace(header, "", values==null || values.size()==0 ? "" : Values.getString(values, ", ", true));
     1137            }
     1138          }
     1139          //displayMaps(parameterMap);
     1140          System.out.println("[Before the labelled extract item] the two color parameter map is : \n ");
     1141          displayMaps(twoColorFirstParameterMap);
     1142          //parameterValues.add( values==null || values.size()==0 ? "" : Values.getString(values, ", ", true));
     1143          //twoColorFirstParameterValues.add(values==null || values.size()==0 ? "" : Values.getString(values, ", ", true));
     1144          //System.out.println(values==null || values.size()==0 ? "-none-" : Values.getString(values, ", ", true));
     1145        }
     1146      }
     1147    }
     1148  }
     1149  /**Annotatable anotatable, DbControl dc
     1150     [TODO] Add more annotations  later
     1151   */
     1152  private static void setParameterValues (Annotatable anotatable, DbControl dc, int count, int hybsize )
     1153  {
     1154    ItemResultList<Annotation> annotations = anotatable.getAnnotationSet().getAnnotations().list(dc);
     1155    for (Annotation annotation: annotations)
     1156    {
     1157      if (anotatable.getProtocol()!=null)
     1158      {
     1159        if (anotatable.getProtocol().isParameter(annotation.getAnnotationType()) && !annotation.getAnnotationType().isRemoved())
     1160        {
     1161          //parameterHybSectionHeader.add("Parameter["+annotation.getAnnotationType().getName()+"]");
     1162          List<?> values= annotation.getValues();
     1163          if (count < hybsize || count==1)
     1164          {
     1165            for (String header : parameterMap.keySet())
     1166            {
     1167              if (header.equals(annotation.getAnnotationType().getName()))
     1168              {
     1169                parameterMap.replace(header, "", values==null || values.size()==0 ? "" : Values.getString(values, ", ", true));
     1170              }
     1171            }
     1172          }
     1173          else if(count==2)
     1174          {
     1175            for (String header : twoColorParameterMap.keySet())
     1176            {
     1177              if (header.equals(annotation.getAnnotationType().getName()))
     1178              {
     1179                twoColorParameterMap.replace(header, "", values==null || values.size()==0 ? "" : Values.getString(values, ", ", true));
     1180              }
     1181            }
     1182          }
     1183          //displayMaps(parameterMap);
     1184          System.out.println("[after the hybridization item] the two color parameter map: \n");
     1185          displayMaps(twoColorParameterMap);
     1186          //if (count < hybsize || count==1)
     1187          //{
     1188          //  parameterValues.add( values==null || values.size()==0 ? "" : Values.getString(values, ", ", true));
     1189          //  //System.out.println(values==null || values.size()==0 ? "-none-" : Values.getString(values, ", ", true));
     1190          //}
     1191          //else if(count==2)
     1192          //{
     1193          //  twoColorParameterValues.add(values==null || values.size()==0 ? "" : Values.getString(values, ", ", true));
     1194          //  //System.out.println(values==null || values.size()==0 ? "-none-" : Values.getString(values, ", ", true));
     1195          //}
     1196        }
     1197      }
     1198    }
     1199  }
     1200  /**
     1201    Display the content of the map
     1202   */
     1203   private static void displayMaps (ConcurrentHashMap map)
     1204   {
     1205     for (Object mapEntrySet: map.entrySet())
     1206     {
     1207       System.out.println("The content of the parameter map [ " +mapEntrySet.toString()+ "]\n");
     1208     }
     1209   }
     1210   
     1211 /**
     1212   [TODO] ADD ANNOTATION TO THIS METHOD
     1213 */
     1214   private static File processFilePath (User user,boolean overwrite, DbControl dc, String pathString)
     1215   {
     1216     if (pathString.startsWith("~/"))
     1217      {
     1218       pathString = "~"+user.getLogin()+pathString.substring(1);
     1219      }
     1220      Path path = new Path(pathString, Path.Type.FILE);   
     1221     
     1222      File file = File.getByPath(dc, path, true);
     1223      file.setMimeType("text/plain"); //set the type of the file
     1224      if (file.isInDatabase() && !overwrite && !file.isRemoved())
     1225      {
     1226        throw new ItemAlreadyExistsException("File[path="+path+"]");     
     1227      }
     1228      else if(!file.isInDatabase())
     1229      {
     1230        dc.saveItem(file);
     1231      }
     1232      return file;
     1233   }
     1234   
    8961235  /**
    8971236    gets the default value of an annotation type, used when annotation value is null
    8981237    @param at, annotation type to obtain the default value from
    899     @return string, deafult value or a tab if default value is null
     1238    @return string, deafult value or an empty string if the default value is null
    9001239   */
    9011240  private static String getDefaultValue(AnnotationType at)
    9021241  {
    9031242   
    904     return at.getDefaultValue()!=null? at.getDefaultValue():"\t";
    905   }
    906  
    907   private static Set<String>  factorValuesHybSectionHeader= new LinkedHashSet<String>();
    908   private static Set<String>  parameterHybSectionHeader= new LinkedHashSet<String>();
     1243    return at.getDefaultValue()!=null? at.getDefaultValue():"";
     1244  }
     1245  private static int scanningProtocolCount=0;
     1246  private static int extractionProtocolCount=0;
     1247  private static int hybridizationProtocolCount=0;
     1248  private static int labelingProtocolCount=0;
     1249  private static int extractProtocolCount=0;
     1250  private static int samplingProtocolCount=0;
     1251  private static ConcurrentHashMap<String,String> parameterMap = new ConcurrentHashMap<String, String>();
     1252  private static ConcurrentHashMap<String,String> twoColorParameterMap = new ConcurrentHashMap<String, String>();
     1253  private static ConcurrentHashMap<String,String> twoColorFirstParameterMap = new ConcurrentHashMap<String, String>();
     1254  private static ConcurrentHashMap<String,String> bioXterParameterMap = new ConcurrentHashMap<String, String>();
     1255  private static Set<String> factorValuesHybSectionHeader= new LinkedHashSet<String>();
     1256  private static Set<String> parameterHybSectionHeader= new LinkedHashSet<String>();
     1257  private static Set<String> newParameterHybSectionHeader= new LinkedHashSet<String>();
     1258  private static Set<String> bioMatXteristicsHeader=  new LinkedHashSet<String>();
     1259  private static Set<String> bioXterHybSectionHeader=  new LinkedHashSet<String>();
    9091260}
Note: See TracChangeset for help on using the changeset viewer.