Resource.java [src/csip/annotations] Revision:   Date:
/*
 * $Id$
 *
 * This file is part of the Cloud Services Integration Platform (CSIP),
 * a Model-as-a-Service framework, API and application suite.
 *
 * 2012-2022, Olaf David and others, OMSLab, Colorado State University.
 *
 * OMSLab licenses this file to you under the MIT license.
 * See the LICENSE file in the project root for more information.
 */
package csip.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Resource definition.
 *
 * @author od
 */
@Repeatable(Resources.class)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface Resource {

  /**
   * The path to the file within the war file or file system.
   *
   * @return the relative path to the file in the war or on the absolute path in
   * the file system.
   */
  String file() default "";


  /**
   * The type of the resource.
   *
   * @return the specific type of the resource.
   */
  ResourceType type() default ResourceType.FILE;


  /**
   * The id of that resource. Set it only if you want to access the resource.
   *
   * @return the id of that resource
   * @see csip.api.server.ServiceResources#getExe(java.lang.String)
   * @see csip.api.server.ServiceResources#getFile(java.lang.String)
   */
  String id() default "";


  /**
   * Should the file executed via wine.
   *
   * @return true if executed via wine, false otherwise.
   */
  boolean wine() default false;


  /**
   * Default arguments, separated by space.
   *
   * @return the executable arguments
   */
  String args() default "";


  /**
   * environment or config variables to be used. ("env1=abc", "env2=def"}
   *
   * @return the environment variables.
   */
  String[] env() default {};


  /**
   * Allows for resource 'inheritance'.
   *
   * @return the class to use/inherit the resources from
   */
  Class<?> from() default Object.class;
}