Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (C) 2014 Philip Helger (www.helger.com) philip[at]helger[dot]com 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.
 
 package com.helger.appbasics.longrun;
 
 import java.io.File;
 import java.util.List;
 import java.util.Map;
 
 
 
 
 {
   private static final String ELEMENT_ROOT = "root";
   private static final String ELEMENT_JOBDATA = "jobdata";
   private static final String ATTR_ID = "id";
   private static final String ATTR_STARTDT = "startdt";
   private static final String ATTR_ENDDT = "enddt";
   private static final String ATTR_EXECSUCCESS = "execsuccess";
   private static final String ATTR_STARTINGUSERID = "startinguserid";
   private static final String ELEMENT_DESCRIPTION = "description";
   private static final String ELEMENT_RESULT = "result";
   private static final String ATTR_TYPE = "type";
 
   private final Map <StringLongRunningJobDatam_aMap = new LinkedHashMap <StringLongRunningJobData> ();
 
   public LongRunningJobResultManager (@Nonnull @Nonempty final String sFilenamethrows DAOException
   {
     super (sFilename);
     initialRead ();
   }
 
   @Override
   @Nonnull
   protected EChange onRead (@Nonnull final IMicroDocument aDoc)
   {
     if (aDoc != null)
       for (final IMicroElement eJobData : aDoc.getDocumentElement ().getAllChildElements ())
       {
         final String sID = eJobData.getAttribute ();
         final DateTime aStartDateTime = eJobData.getAttributeWithConversion (DateTime.class);
         final DateTime aEndDateTime = eJobData.getAttributeWithConversion (DateTime.class);
         final ESuccess eExecSuccess = ESuccess.valueOf (StringParser.parseBool (eJobData.getAttribute ()));
         final String sStartingUserID = eJobData.getAttribute ();
         final IReadonlyMultiLingualText aJobDescription = MicroTypeConverter.convertToNative (eJobData.getFirstChildElement (),
                                                                                               ReadonlyMultiLingualText.class);
         final IMicroElement eResult = eJobData.getFirstChildElement ();
         final EType eResultType = EType.getFromIDOrNull (eResult.getAttribute ());
         final String sResultText = eResult.getTextContent ();
         LongRunningJobResult aResult;
         switch (eResultType)
         {
           case :
             aResult = LongRunningJobResult.createFile (new File (sResultText));
             break;
           case :
             aResult = LongRunningJobResult.createXML (MicroReader.readMicroXML (sResultText));
             break;
           case :
             aResult = LongRunningJobResult.createText (sResultText);
             break;
          case :
            aResult = LongRunningJobResult.createLink (new SimpleURL (sResultText));
            break;
          default:
            throw new IllegalStateException ("Unknown type!");
        }
        _internalAdd (new LongRunningJobData (sID,
                                              aStartDateTime,
                                              aEndDateTime,
                                              eExecSuccess,
                                              sStartingUserID,
                                              aJobDescription,
                                              aResult));
      }
    return .;
  }
  {
    final IMicroDocument aDoc = new MicroDocument ();
    final IMicroElement eRoot = aDoc.appendElement ();
    for (final LongRunningJobData aJobData : ContainerHelper.getSortedByKey ().values ())
    {
      final IMicroElement eJobData = eRoot.appendElement ();
      eJobData.setAttribute (aJobData.getID ());
      eJobData.setAttributeWithConversion (aJobData.getStartDateTime ());
      eJobData.setAttributeWithConversion (aJobData.getEndDateTime ());
      eJobData.setAttribute (, Boolean.toString (aJobData.getExecutionSuccess ().isSuccess ()));
      if (aJobData.getStartingUserID () != null)
        eJobData.setAttribute (aJobData.getStartingUserID ());
      // Description
      eJobData.appendChild (MicroTypeConverter.convertToMicroElement (aJobData.getJobDescription (),
                                                                      ));
      // Result
      final IMicroElement eResult = eJobData.appendElement ();
      eResult.setAttribute (aJobData.getResult ().getType ().getID ());
      eResult.appendText (aJobData.getResult ().getAsString ());
    }
    return aDoc;
  }
  private void _internalAdd (@Nonnull final LongRunningJobData aJobData)
  {
    if (aJobData == null)
      throw new NullPointerException ("JobData");
    .put (aJobData.getID (), aJobData);
  }
  public void addResult (@Nonnull final LongRunningJobData aJobData)
  {
    if (aJobData == null)
      throw new NullPointerException ("jobData");
    if (!aJobData.isEnded ())
      throw new IllegalArgumentException ("Passed jobData is not yet finished");
    .writeLock ().lock ();
    try
    {
      _internalAdd (aJobData);
      markAsChanged ();
    }
    finally
    {
      .writeLock ().unlock ();
    }
  }
  {
    .readLock ().lock ();
    try
    {
      return ContainerHelper.newList (.values ());
    }
    finally
    {
      .readLock ().unlock ();
    }
  }
  public LongRunningJobData getJobResultOfID (@Nullable final String sJobResultID)
  {
    .readLock ().lock ();
    try
    {
      return .get (sJobResultID);
    }
    finally
    {
      .readLock ().unlock ();
    }
  }
New to GrepCode? Check out our FAQ X