/*******************************************************************************
* Copyright 2014 by E-Government Innovation Center EGIZ, Graz, Austria
* PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
* joint initiative of the Federal Chancellery Austria and Graz University of
* Technology.
*
* Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
* the European Commission - subsequent versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
* http://www.osor.eu/eupl/
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and
* limitations under the Licence.
*
* This product combines work with different licenses. See the "NOTICE" text
* file for details on the various modules and licenses.
* The "NOTICE" text file is part of the distribution. Any derivative works
* that you distribute must include a readable copy of the "NOTICE" text file.
******************************************************************************/
/**
* Copyright 2006 by Know-Center, Graz, Austria
* PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a
* joint initiative of the Federal Chancellery Austria and Graz University of
* Technology.
*
* Licensed under the EUPL, Version 1.1 or - as soon they will be approved by
* the European Commission - subsequent versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
* http://www.osor.eu/eupl/
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Licence is distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Licence for the specific language governing permissions and
* limitations under the Licence.
*
* This product combines work with different licenses. See the "NOTICE" text
* file for details on the various modules and licenses.
* The "NOTICE" text file is part of the distribution. Any derivative works
* that you distribute must include a readable copy of the "NOTICE" text file.
*
* $Id: SignatureTypes.java,v 1.5 2006/10/31 08:18:56 wprinz Exp $
*/
package at.knowcenter.wag.egov.egiz.sig;
import org.apache.commons.lang3.ArrayUtils;
public class SignatureTypes {
/**
* Defines all supported states for {@link SignatureTypes} (signature
* profiles). Signature types can be enabled ("on"), can be set to support
* signature only ("sign_only"), to verification only ("verify_only") or can
* be disabled ("off" or any other value not covered by other enum values).
*
* @author Datentechnik Innovation GmbH
*/
public enum State {
/**
* Enables a signature profile.
*/
ON("on", "yes", "true", "enabled"),
/**
* Disables a signature profile.
*/
OFF(),
/**
* Restricts the signature profile so that is can only be used for
* verification purposes and not for signature.
*/
VERIFY_ONLY("verify_only", "verify-only", "verifyonly", "verify only",
"verify"),
/**
* Allows the signature profile to be used for signature but not for
* verification.
*/
SIGN_ONLY("sign_only", "sign-only", "signonly", "sign only", "sign");
/**
* Sets the default state when no valid value was provided.
*/
private static final State DEFAULT = OFF;
/**
* States that allow signatures.
*/
private static final State[] CAN_SIGN = { ON, SIGN_ONLY };
/**
* States that allow verification.
*/
private static final State[] CAN_VERIFY = { ON, VERIFY_ONLY };
private String[] keyWords;
private State(String... keyWords) {
this.keyWords = keyWords;
}
/**
* Returns a valid State from a given {@code keyWord}. If the
* {@code keyWord} cannot be matched to a certain state, the default
* State {@link #OFF} is returned.
*
* @param keyWord
* A valid keyword like "on", "sign_only"...
* @return The enum State.
*/
public static State fromString(String keyWord) {
if (keyWord == null) {
return DEFAULT;
}
try {
return valueOf(keyWord.toUpperCase());
} catch (IllegalArgumentException e) {
for (State candidate : values()) {
for (String candidateKeyWord : candidate.keyWords) {
if (keyWord.equalsIgnoreCase(candidateKeyWord)) {
return candidate;
}
}
}
return DEFAULT;
}
}
/**
* Returns {@code true} when the current state is one of the given
* candidate {@code states}.
*
* @param states
* The candidate states.
* @return {@code true} when the current state is one of the given
* candidate states, {@code false} if not.
*/
public boolean in(State... states) {
if (states != null) {
for (State state : states) {
if (this == state) {
return true;
}
}
}
return false;
}
/**
* Returns if the respective state allows signatures.
*
* @return {@code true} if signatures are allowed, {@code false} if not.
*/
public boolean canSign() {
return in(CAN_SIGN);
}
/**
* Returns if the respective state allows verification.
*
* @return {@code true} if verification is allowed, {@code false} if
* not.
*/
public boolean canVerify() {
return in(CAN_VERIFY);
}
}
/**
* Standard key get/set the singature name
*/
public static final String SIG_NAME = "SIG_NAME";
/**
* Standard key get/set the signature date
*/
public static final String SIG_DATE = "SIG_DATE";
/**
* Standard key get/set the signator issuer
*/
public static final String SIG_ISSUER = "SIG_ISSUER";
/**
* Standard key get/set the siganture value
*/
public static final String SIG_VALUE = "SIG_VALUE";
/**
* Standard key get/set the normalisation method used
*/
public static final String SIG_NORM = "SIG_NORM";
/**
* Standard key get/set the signation id's used by BKU signated documents
*/
public static final String SIG_ID = "SIG_ID";
/**
* The EGIZ Algorithm "Kennzeichnung".
*/
public static final String SIG_KZ = "SIG_KZ";
/**
* Standard key get/set the reference to the signature label (image mark)
*/
public static final String SIG_LABEL = "SIG_LABEL";
/**
* Standard key get/set the serial number of the signature
*/
public static final String SIG_NUMBER = "SIG_NUMBER";
// public static final String SIG_TYPE = "SIG_TYPE";
/**
* Standard key get/set the signature meta informations
*/
public static final String SIG_META = "SIG_META";
/**
* Standard key get/set the signature algorithm (sign + hash)
*/
public static final String SIG_ALG = "SIG_ALG";
/**
* Standard key get/set the signature note
* added by rpiazzi
*/
public static final String SIG_NOTE = "SIG_NOTE";
/**
* Standard key get/set the signature subject
* Added to be able to define static signator name within config file
* added by rpiazzi
*/
public static final String SIG_SUBJECT = "SIG_SUBJECT";
public static String[] REQUIRED_SIG_KEYS = new String[] { SIG_DATE,
SIG_ISSUER, SIG_VALUE, SIG_NUMBER, SIG_ID, SIG_KZ };
public static boolean isRequredSigTypeKey(String name) {
return ArrayUtils.contains(REQUIRED_SIG_KEYS, name);
}
}