/**
* personium.io
* Copyright 2014 FUJITSU LIMITED
*
* 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.fujitsu.dc.core.model.ctl;
import java.util.ArrayList;
import java.util.List;
import org.odata4j.core.PrefixedNamespace;
import org.odata4j.edm.EdmAnnotation;
import org.odata4j.edm.EdmAnnotationAttribute;
import org.odata4j.edm.EdmProperty;
import org.odata4j.edm.EdmSimpleType;
import com.fujitsu.dc.common.utils.DcCoreUtils;
/**
* Edm 定義体で共通的に使う定数群を定義.
*/
public class Common {
private Common() {
}
/**
* UnitCtlの名前空間名.
*/
public static final String EDM_NS_UNIT_CTL = "UnitCtl";
/**
* CellCtlの名前空間名.
*/
public static final String EDM_NS_CELL_CTL = "CellCtl";
/**
* ODataSvcSchemaの名前空間名.
*/
public static final String EDM_NS_ODATA_SVC_SCHEMA = "ODataSvcSchema";
/**
* Schema プロパティの定義体.
*/
public static final EdmProperty.Builder P_SCHEMA = EdmProperty.newBuilder("Schema").setType(EdmSimpleType.STRING)
.setNullable(true).setDefaultValue("null");
/**
* _Box.Nameプロパティの定義体.
*/
public static final EdmProperty.Builder P_BOX_NAME = EdmProperty.newBuilder("_Box.Name")
.setType(EdmSimpleType.STRING)
.setNullable(true);
/**
* id プロパティの定義体.
*/
public static final EdmProperty.Builder P_ID = EdmProperty.newBuilder("__id")
.setType(EdmSimpleType.STRING).setDefaultValue("UUID()");
/** 拡張スキーマFormat定義. */
public static final String DC_FORMAT = "Format";
/** 拡張スキーマFormat正規表現定義. */
public static final String DC_FORMAT_PATTERN_REGEX = "regEx";
/** 拡張スキーマFormat定義. */
public static final String DC_FORMAT_PATTERN_URI = "uri";
/** 拡張スキーマFormat定義. */
public static final String DC_FORMAT_PATTERN_SCHEMA_URI = "schema-uri";
/** 拡張スキーマFormat定義. */
public static final String DC_FORMAT_PATTERN_CELL_URL = "cell-url";
/** 拡張スキーマFormat定義.1つ以上のスペース区切り英数字. */
public static final String DC_FORMAT_PATTERN_USUSST = "unordered-set-of-unique-space-separated-tokens";
/** 先頭が-,_以外で始まる半角英数大小文字,-,_が1文字から128文字. */
public static final String PATTERN_NAME = "^[a-zA-Z0-9][a-zA-Z0-9-_]{0,127}$";
/** 先頭が半角記号以外で始まる半角英数大小文字,半角記号(-_!#$%*+/=^`{|}~.@)が1文字から128文字. */
public static final String PATTERN_NAME_WITH_SIGN = "^[a-zA-Z0-9][a-zA-Z0-9-_!$*=^`{|}~.@]{0,127}$";
/** 先頭が_,:以外で始まる半角英数大小文字,-,_,+,:が1文字から128文字. */
public static final String PATTERN_RELATION_NAME = "^[a-zA-Z0-9-\\+][a-zA-Z0-9-_\\+:]{0,127}$";
/** multiplicityのFormat定義. */
public static final String PATTERN_MULTIPLICITY = "0\\.\\.1|1|\\*";
/** 先頭が-,_以外で始まる半角英数大小文字,-,_が1文字から200文字. */
public static final String PATTERN_ID = "^[a-zA-Z0-9][a-zA-Z0-9-_:]{0,199}$";
/** InReplyTo32文字. */
public static final String PATTERN_IN_REPLY_TO = "^.{32}$";
/** メッセージタイプ_messageまたはreq.relation.buildまたはreq.relation.break. */
public static final String PATTERN_MESSAGE_TYPE = "^(message)|(req\\.relation\\.build)|(req\\.relation\\.break)$";
/** メッセージタイトル0文字から256文字文字. */
public static final String PATTERN_MESSAGE_TITLE = "^.{0,256}$";
/** メッセージプライオリティ 1から5. */
public static final String PATTERN_MESSAGE_PRIORITY = "^[1-5]$";
/** メッセージの文字列型valueの最大長. */
public static final int MAX_MESSAGE_BODY_LENGTH = 1024 * 64;
/** ユーザデータのKeyのFormat定義. */
public static final String PATTERN_USERDATA_KEY = "^[a-zA-Z0-9][a-zA-Z0-9-_]{0,127}$";
/** ユーザデータの小数型valueのFormat定義. */
public static final String PATTERN_DECIMAL = "^-?[0-9]{1,5}\\.[0-9]{1,5}$";
/** ユーザデータの文字列型valueの最大長. */
public static final int MAX_USERDATA_VALUE_LENGTH = 1024 * 50;
/** qクエリの最大長. */
public static final int MAX_Q_VALUE_LENGTH = 255;
/** スキーマ定義で使用するシステム時間を指定するための予約語. */
public static final String SYSUTCDATETIME = "SYSUTCDATETIME()";
/** イベントの文字列型valueの最大長. */
public static final int MAX_EVENT_VALUE_LENGTH = 1024 * 50;
/**
* Name項目に対するdc:Formatの定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_NAME = new ArrayList<EdmAnnotation<?>>();
/**
* 半角記号を許容する項目に対するdc:Formatの定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_NAME_WITH_SIGN = new ArrayList<EdmAnnotation<?>>();
/**
* RelationのName項目に対するdc:Formatの定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_RELATION_NAME = new ArrayList<EdmAnnotation<?>>();
/**
* dc:FormatのURI定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_URI = new ArrayList<EdmAnnotation<?>>();
/**
* dc:FormatのSchema URI定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_SCHEMA_URI = new ArrayList<EdmAnnotation<?>>();
/**
* dc:FormatのCell URL定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_CELL_URL = new ArrayList<EdmAnnotation<?>>();
/**
* Multiplicity項目に対するdc:Formatの定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_MULTIPLICITY = new ArrayList<EdmAnnotation<?>>();
/**
* ID項目に対するdc:Formatの定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_ID = new ArrayList<EdmAnnotation<?>>();
/**
* InReplyTo項目に対するdc:Formatの定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_IN_REPLY_TO = new ArrayList<EdmAnnotation<?>>();
/**
* MessageType項目に対するdc:Formatの定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_MESSAGE_TYPE = new ArrayList<EdmAnnotation<?>>();
/**
* MessageTitle項目に対するdc:Formatの定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_MESSAGE_TITLE = new ArrayList<EdmAnnotation<?>>();
/**
* MessagePriority項目に対するdc:Formatの定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_MESSAGE_PRIORITY = new ArrayList<EdmAnnotation<?>>();
/**
* AccountType項目に対するdc:Formatの定義.
*/
public static final List<EdmAnnotation<?>> DC_FORMAT_ACCOUNT_TYPE = new ArrayList<EdmAnnotation<?>>();
/**
* DC名前空間.
*/
public static final PrefixedNamespace DC_NAMESPACE = new PrefixedNamespace(DcCoreUtils.XmlConst.NS_DC1,
DcCoreUtils.XmlConst.NS_PREFIX_DC1);
/**
* published プロパティの定義体.
*/
public static final EdmProperty.Builder P_PUBLISHED = EdmProperty.newBuilder("__published")
.setType(EdmSimpleType.DATETIME).setDefaultValue(SYSUTCDATETIME).setPrecision(3);
/**
* updated プロパティの定義体.
*/
public static final EdmProperty.Builder P_UPDATED = EdmProperty.newBuilder("__updated")
.setType(EdmSimpleType.DATETIME).setDefaultValue(SYSUTCDATETIME).setPrecision(3);
static {
DC_FORMAT_NAME.add(createFormatNameAnnotation());
DC_FORMAT_NAME_WITH_SIGN.add(createFormatNameWithSignAnnotation());
DC_FORMAT_URI.add(createFormatUriAnnotation());
DC_FORMAT_SCHEMA_URI.add(createFormatSchemaUriAnnotation());
DC_FORMAT_CELL_URL.add(createFormatCellUrlAnnotation());
DC_FORMAT_MULTIPLICITY.add(createFormatMultiplicityAnnotation());
DC_FORMAT_ID.add(createFormatIdAnnotation());
DC_FORMAT_RELATION_NAME.add(createFormatRelationNameAnnotation());
DC_FORMAT_IN_REPLY_TO.add(createFormatInReplyToAnnotation());
DC_FORMAT_MESSAGE_TYPE.add(createFormatMessageTypeAnnotation());
DC_FORMAT_MESSAGE_TITLE.add(createFormatMessageTitleAnnotation());
DC_FORMAT_MESSAGE_PRIORITY.add(createFormatMessagePriorityAnnotation());
DC_FORMAT_ACCOUNT_TYPE.add(createFormatAccountTypeAnnotation());
}
/**
* Name項目に対するdc:FormatのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatNameAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_REGEX + "('" + Common.PATTERN_NAME + "')");
}
/**
* Name項目に対するdc:FormatのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatNameWithSignAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_REGEX + "('" + Common.PATTERN_NAME_WITH_SIGN + "')");
}
/**
* RelationのName項目に対するdc:FormatのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatRelationNameAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_REGEX + "('" + Common.PATTERN_RELATION_NAME + "')");
}
/**
* dc:FormatのURIのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatUriAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_URI);
}
/**
* dc:FormatのSchema URIのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatSchemaUriAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_SCHEMA_URI);
}
/**
* dc:FormatのCell URLのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatCellUrlAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_CELL_URL);
}
/**
* dc:FormatのMultiplicityのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatMultiplicityAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_REGEX + "('" + Common.PATTERN_MULTIPLICITY + "')");
}
/**
* ID項目に対するdc:FormatのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatIdAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_REGEX + "('" + Common.PATTERN_ID + "')");
}
/**
* InReplyTo項目に対するdc:FormatのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatInReplyToAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_REGEX + "('" + Common.PATTERN_IN_REPLY_TO + "')");
}
/**
* MessageType項目に対するdc:FormatのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatMessageTypeAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_REGEX + "('" + Common.PATTERN_MESSAGE_TYPE + "')");
}
/**
* MessageTitle項目に対するdc:FormatのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatMessageTitleAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_REGEX + "('" + Common.PATTERN_MESSAGE_TITLE + "')");
}
/**
* Message Priority 項目に対するdc:FormatのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatMessagePriorityAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_REGEX + "('" + Common.PATTERN_MESSAGE_PRIORITY + "')");
}
/**
* Account Type 項目に対するdc:FormatのAnnotationを返却.
* @return EdmAnnotation
*/
public static EdmAnnotation<?> createFormatAccountTypeAnnotation() {
return new EdmAnnotationAttribute(
DC_NAMESPACE.getUri(), DC_NAMESPACE.getPrefix(),
DC_FORMAT, DC_FORMAT_PATTERN_USUSST + "('" + Account.TYPE_VALUE_BASIC + "', '"
+ Account.TYPE_VALUE_OIDC_GOOGLE + "')");
}
}