示例#1
0
  /**
   * Populates this Persistence with the data that needs to be stored from the original source
   * object.
   */
  @Override
  public void extractDataFromSource(Object source) throws PersistenceException {
    if (!(source instanceof ProcessingResource)) {
      throw new UnsupportedOperationException(
          getClass().getName()
              + " can only be used for "
              + ProcessingResource.class.getName()
              + " objects!\n"
              + source.getClass().getName()
              + " is not a "
              + ProcessingResource.class.getName());
    }

    super.extractDataFromSource(source);
    Resource res = (Resource) source;

    ResourceData rData = Gate.getCreoleRegister().get(res.getClass().getName());
    if (rData == null)
      throw new PersistenceException("Could not find CREOLE data for " + res.getClass().getName());

    // now get the runtime params
    ParameterList params = rData.getParameterList();
    try {
      // get the values for the init time parameters
      runtimeParams = Factory.newFeatureMap();
      // this is a list of lists
      Iterator<List<Parameter>> parDisjIter = params.getRuntimeParameters().iterator();
      while (parDisjIter.hasNext()) {
        Iterator<Parameter> parIter = parDisjIter.next().iterator();
        while (parIter.hasNext()) {
          Parameter parameter = parIter.next();
          String parName = parameter.getName();
          Object parValue = res.getParameterValue(parName);
          ((FeatureMap) runtimeParams).put(parName, parValue);
        }
      }
      runtimeParams = PersistenceManager.getPersistentRepresentation(runtimeParams);
    } catch (ResourceInstantiationException rie) {
      throw new PersistenceException(rie);
    }
  }