프로퍼티타입 (PropertyType)
노트타입의 개별 속성을 정의정의합니다.
Value Type(valueType)
각 프로퍼티타입의 유형을 정의정의합니다.
기본형 : STRING, INT, LONG, DOUBLE, BOOLEAN, DATE
Java의 기본형에 1:1로 매핑되는 유형이며, DB의 경우는 정확하게 매핑되는 유형이 없는 경우는 유사한 유형으로 매핑 매핑합니다. ex) INT형은 Oracle의 경우 그냥 NUMBER로 매핑
...
STRING형과 비교하면 줄바꿈 문자등이 포함되어 일반적으로 textarea를 이용하여 입력을 받는 형태를 의미하며 DB의 TEXT(mysql)나 CLOB(oracle) 등으로 매핑되어 저장됩니다.
HTML
TEXT와 저장 형태는 동일하지만, 기본적으로 HTML 형태의 데이터를 저장하는데 사용됩니다. 본안 HTML 속성의 경우
FILE, IMAGE
FILE형은 해당 프로퍼티타입에 fileHandler(기본값은 default) 설정을 통하여 파일 저장 방식을 지정할 수 있으며, fileHandler를 변경하여 저장 방식을 커스터마이징 할 수 있다.
...
Code Block |
---|
file: default: path: /resource/backend/files |
FILES, IMAGES
FILES형은 FILE형을 처리하는 것을 배열형태로 저장하는 것을 지원합니다.
CODE
CODE형은 Java의 enum과 같이 선택할 수 있는 값을 제공하는 유형이며, 프로퍼티타입의 code 속성으로 다음과 같이 설정한다직접 코드 값을 JSON 형태로 정의하거나 Java 클래스의 enum 타입에 직접 매핑하는 형태로 정의합니다.
Code Block |
---|
"code": [{"value": "node", "label": "Node"}, {"value": "data", "label": "Data"},] {"valuecode": "logic", "label": "Logic"}, {"value": "path", "label": "Path"}]net.ion.ice.core.node.PropertyType$ValueType" |
REFERENCE
REFERENCE는 다른 노드에 대한 ID를 저장하여 노드 간의 Relation을 정의하는 유형이다유형입니다.. 이를 위하여 다음과 같은 추가적인 속성을 설정한다속성에 대한 설정이 필요합니다.
referenceType : 참조할 노드 타입 지정
filter : 참조 대상 노드를 선택하기 위한 조건이 필요한 경우 이를 Parameter Query 형태의 filter로 설정, 이 경우 해당 REFERENCE를 뒤한 code API를 호출하면 필터링된 코드 목록 리턴
ex) 프로퍼티타입의 referenceValue의 filter는 "filter" : "tid_matching={{:referenceType}}" 와 같이 설정되어 있음
API 호출시에 http://localhost:8080/node/propertyType/code.json?pid=referenceValue&referenceType=event 와 같이 호출하면 referenceType이 event인 프로퍼티타입 코드 리스트 반환
REFERENCE형에 대한 저장시에 대상 노드타입의 idable이 하나 이상이면 id1>id2 와 같은 형태로 ID가 생성되기 때문에 이런 경우를 고려하여 refId라는 추가적인 값을 가지게 된다. 따라서 REFERENCE형에 대한 API에서는 다음과 같은 형태로 리턴된다리턴 됩니다.
{
"refId": "event>tid",
"value": "tid",
"label": "NodeType ID"
}
이런경우 indexable이 true라면 기본 PID로는 refId가 value와 label이 인덱싱되고, PID_label 필드로 label이, PID_value 필드로 value 가 각각 인덱싱되어 PID_labelrefId 필드로 refId가 인덱싱 됩니다. 따라서 PID_refId_matching=xxx와 같은 형태로 질의가 가능하다.가능합니다.
PARENT
REFERENCE와 동일한 기능을 제공합니다. 추가적으로 상위 노드 저장시에 해당 노드에 값이 없어도 자동으로 값을 저장하며 상위 노드가 삭제되면 해당 노드도 삭제됩니다.
PART
REFERENCE, PARENT와 동일하게 Relation 기능을 제공하지만, PART는 1:1 관계만 제공하며, 상위 노드 API에 항상 포함되어 리턴됩니다.
Code Block |
---|
subFormPart: {
testNodePartsId: 2,
name: "TEST PART",
description: "test",
id: "2",
label: "TEST PART",
file: null
},
subFormReference: {
value: "1",
label: "TEST REFERENCE",
refId: "1"
} |
REFERENCES
REFERENCES는 REFERENCE 유형을 다중 선택 가능한 유형이다유형입니다. 따라서 추가 속성이나 인덱싱도 REFERENCE와 동일하게 설정하며, API 응답 형태는 다음과 같이 배열로 반환된다반환됩니다.
Code Block |
---|
[ |
...
{ |
...
"refId": "event>tid", |
...
"value": "tid", |
...
"label": "NodeType ID" |
...
}, |
...
{ |
...
"refId": "event>event", |
...
"value": "event", |
...
"label": "Event" } ] |
}
...
PARTS
REFERENCES와 동일한 기능을 제공합니다. 다만, PART와 마찬가지로 모든 API에서 항상 Object 형태로 포함되어 제공됩니다.
REFERENCED
카테고리-컨텐츠 관계 처럼 REFERENCE나 REFERENCES로 참조하는 대상 목록을 제공하는 유형이다. REFERENCED 유형은 실제로 값을 저장하는 것이 아니라 다음과 같은 추가 속성을 이용하여 내부적으로 쿼리를 실행한 결과를 제공한다.
referenceType : 참조하고 있는 노드 타입 지정
referenceValue : 참조하고 있는 노드 타입의 REFERENCE 속성 지정
filter : REFERENCED 목록을 제공하기 위해서 sorting이나 조건이 필요한 경우 이를 Parameter Query 형태의 filter로 설정
...
CHILDREN
PARENT와 CHILDREN은 REFERENCE와 REFERENCED와 동일한 개념
...
조건부 노출 설정(enableCondition)
조건부 노출 설정은 동일 노드의 다른 프로퍼티의 값에 따라서 해당 프로퍼티의 노출 여부를 정의한다.
required : 필수 여부
idable : 아이디 여부
labelable : Label 여부
treeable : REFERENCE일 경우 트리형태 지원 여부
indexable : 인덱싱 여부
analyzer : 인덱싱을 하는 경우 적용할 Analyzer 지정
simple : Lowercase 만 적용
standard : Lowercase와 Stop필터 적용
code : Lowercase 적용하고, 공백이나 ‘,’ 문자로 토큰
cjk : Lowercase, CJKBigram, StopFilter 적용
referenceType : valueType이 REFERENCE 또는 REFERENCED일 경우 참조할 노드 타입 지정
referenceValue : 참조 노드 타입의 프로퍼티 타입 지정
code : CODE 형에서 사용할 코드 값
validationTypes : Validation 체크 값
fileHandler : 파일 저장에 사용할 저장소 지정
정의
NodeType에 종속되는 스키마이고 NodeType이 가지게 되는 데이터 속성들의 유형을 정의한다.
쉽게 말해 RDBMS(오라클, MySql 등) 의 테이블 컬럼 개념이라고 볼 수 있다.
솔루션 API 호출 시 valueType에 따라 JSON 의 값의 형식이 달라진다.
솔루션 관리자 UI 구성 시 valueType에 따라 Presentational Component 의 사용이 달라진다.
속성정의
...
속성
...
필수
...
기본값
...
설명
...
pid
...
필수
...
PropertyType의 ID 이므로 NodeType 에 속한 상태에서 중복되어서는 안된다.
본 프로젝트에서는 테이블 컬럼명과 동일하게 정의한다.
...
name
...
필수
...
PropertyType의 명
...
valueType
...
필수
...
PropertyType 의 속성타입
“STRING” : 문자형 데이터 타입으로 사용할 때 정의한다. MySql의 VARCHAR 개념이다.
“INT” : 숫지형 데이터 타입으로 사용할 때 정의한다. MySql의 INT 개념이다.
“LONG” : 숫지형 데이터 타입으로 사용할 때 정의한다. MySql의 BIGINT 개념이다.
“DOUBLE” : 숫자형 데이터 타입으로 사용할 때 정의한다. MySql의 DOUBLE 개념이다.
“BOOLEAN” : 불리언 데이터 타입으로 사용할 때 정의한다.
“DATE” : 날짜형 데이터 타입으로 사용할 때 정의한다. MySql의 DATE 개념이다.
“DATETIME” : 날짜형 데이터 타입으로 사용할 때 정의한다. MySql의 DATE 개념이다.
“MONTH” : 문자형 데이터 타입으로 사용할 때 정의한다.
“TEXT” : 문자형 데이터 타입으로 사용할 때 정의한다. MySql의 TEXT 개념이다.
“FILE” : 파일 데이터 타입으로 사용할 때 정의한다.
“IMAGE” : 이미지 파일 데이터 타입으로 사용할 때 정의한다.
“CODE” : 코드형 데이터 타입으로 사용할 때 정의한다.
“CODES” : 여러 개의 코드형 데이터 타입으로 사용할 때 정의한다. 값은 , 로 구분되어 저장된다.
“REFERENCE” : 연관 데이터 타입으로 사용할 때 정의한다. 연관 NodeType과 1:1 관계를 가지고, 연관 데이터의 id 값을 저장한다.
“REFERENCED” : 연관 데이터 타입으로 사용할 때 정의한다. 연관 NodeType과 1:N 관계를 가진다.
“PARENT” : 연관 데이터 타입으로 사용할 때 정의한다. 연관 NodeType과 1:1 관계를 가지고, 연관 데이터의 id 값을 저장한다.
“CHILDREN” : 연관 데이터 타입으로 사용할 때 정의한다. 연관 NodeType과 1:N 관계를 가진다.
“REFERENCES” : 연관 데이터 타입으로 사용할 때 정의한다. 연관 NodeType과 1:N 관계를 가진다. 값은 연관 데이터의 id값을 , 로 구분되어 저장된다.
“PART” : 연관 데이터 타입으로 사용할 때 정의한다. 연관 NodeType과 1:1 관계를 가진고, 연관 데이터의 id 값을 저장한다.
“PARTS” : 연관 데이터 타입으로 사용할 때 정의한다. 연관 NodeType과 1:N 관계를 가진다.
값은 연관 데이터의 id값을 , 로 구분되어 저장된다.
“OBJECT” : JSON String 으로 값을 저장하고 API 출력시 JSON 형태로 출력한다.
“JSON” : JSON String 으로 값을 저장하고 API 출력시 JSON String 형태로 출력한다.
...
defaultValue
...
기본값 정의
...
defaultComponent
...
솔루션 관리자 UI 구성 시 바인딩 하게 될 Presentational Component
...
required
...
false
...
필수 여부
true : 사용
false : 미사용
...
idable
...
false
...
ID (key) 여부
true : 사용
false : 미사용
...
labelable
...
false
...
라벨 여부
labelable이 true 인경우 해당 데이터는 명칭이 된다. 예를 들면 API 호출시 valueType이 REFERENCE 인 데이터는
{
“reference”: { “value”: “1”, “label”: “사용가능” }
}
이런식으로 출력되는데 labelable이 true 인경우 해당 값이 “label” 에 출력된다.
true : 사용
false : 미사용
...
treeable
...
false
...
트리 기능 여부
valueType이 REFERENCE, PARENT 인 경우에만 적용된다.
현재 NodeType이 계층구조를 가지고 있을 때 부모에 해당하는 PropertyType이면 true 로 한다.
true : 사용
false : 미사용
...
i18n
...
false
...
다국어 기능 여부
true : 사용
false : 미사용
...
indexable
...
false
...
인덱싱 여부
NodeType의 repositoryType 이 “node” 인 경우 Infinispan 캐쉬 저장소를 사용하는데 indexable이 true인 경우에만 해당 데이터를 검색 할 수 있다.
indexable이 true인 경우 솔루션 관리자 UI 구성 시 검색영역을 구성 할 수있다.
true : 사용
false : 미사용
...
analyzer
...
NodeType의 repositoryType이 “node”인 경우에만 적용된다.
indexable이 true 인 경우에만 적용된다.
Infinispan 캐쉬 저장소를 사용 할 경우 Lucene 을 사용하는데 Lucene의 analyzer를 지정할수있다.
“simple” : 일반적인 like 검색이 가능해지고 보통 valueType이 STRING, TEXT 인 문자형 데이터일 때 사용한다.
“code” : 일반적인 = 검색이 가능해지고 보통 valueType이 PARENT, REFERENCE, REFERENCES, CODE 인 코드, 연관 데이터일 때 사용한다.
...
referenceType
...
valueType이 REFERENCE, REFERENCES, REFERENCED, PARENT, CHILDREN, PART, PARTS 인 경우에만 적용된다.
연관된 NodeType의 tid를 정의한다.
...
referenceValue
...
valueType이 REFERENCE, REFERENCES, REFERENCED, PARENT, CHILDREN, PART, PARTS 인 경우에만 적용된다.
referenceType에 정의된 NodeType의 PropertyType의 pid를 정의 할 수있다.
정의 하지 않을시 referenceType에 정의된 NodeType의 id와 연관 관계를 맺는다.
...
filter
...
valueType이 REFERENCE, REFERENCES, REFERENCED, PARENT, CHILDREN, PART, PARTS 인 경우에만 적용된다.
code API 사용시 적용될 파라미터 쿼리를 정의할 수 있다.
(예) uppderCode_matching=useYn&count=1
...
code
...
valueType이 CODE, CODES 인 경우에만 적용된다.
사용될 코드형 데이터를 JSON Array 형태로 정의 할 수 있다.
(예) [ { “value”: “simple”, “label”: “Simple Analyzer” } ]
...
idType
...
idable이 true인 경우에만 적용된다.
id의 자동 발급 기능을 정의 할 수 있다.
“autoIncrement”: 시퀀스 발급 형태로 valueType이 숫자형 이어야한다.
“UUID”: Java 의 UUID를 사용한다.
“hash”: Java 의 UUID의 hashCode를 사용한다.
...
orderNo
...
PropertyType 들의 Sorting 순서이다.
솔루션 관리자 UI 구성시 목록의 헤더, 폼의 컴포넌트 배치에 관련되어있다.
...
columnId
...
NodeType의 tableName이 정의된 경우에만 적용된다.
RDBMS 테이블의 컬럼명과 바인딩한다.
예시
JSON
{
“typeId”: “nodeType”,
“parentId”: “root”,
“tid:”: “ctsBasAptM”,
“repositoryType”: “node”,
“typeName”: “공항기초”,
“historyable”: true,
“propertyTypes”: [
{
“pid”: “comAreaCdCId”,
“name”: “지역”,
“valueType”: “REFERECES”,
“idable”: false,
“labelable”: false,
“indexable”: true,
“analyzer”: “code”,
“required”: false,
“referenceType”: “comAreaCdC”,
“referenceValue”: “”,
“filter”: “useYn_matching=y”,
“orderNo”: 10
},
{
“pid”: “id”,
“name”: “공항코드”,
“valueType”: “STRING”,
“idable”: true,
“labelable”: false,
“indexable”: true,
“analyzer”: “code”,
“required”: true,
“orderNo”: 20
},
{
“pid”: “aptNm”,
“name”: “공항명”,
“valueType”: “STRING”,
“idable”: false,
“labelable”: true,
“indexable”: true,
“analyzer”: “simple”,
“required”: true,
“orderNo”: 30
}
],
“events: []
}REFERENCED와 동일한 기능을 제공합니다. 추가적으로 항상 하위 데이터가 API에 포함되며, 상위 노드 삭제시 하위 노드도 삭제 됩니다.
기타 : MONTH, COLOR, JSON
STRING 동일하지만 해당하는 UI 활용하기 위하여 구분한 유형입니다.
주요 속성
ValueType과 관련된 속성 이외의 주요 속성은 다음과 같습니다.
pid | valueType | config | description |
---|---|---|---|
pid | STRING | idable | PropertyType의 아이디를 지정합니다. |
defaultValue | STRING | 기본값을 정의합니다. {{: nextOrderNo() }}와 같이 ICE EL을 지원합니다. | |
defaultComponent | STRING | 자동 폼생성시에 사용되는 기본 컴포넌트를 지정합니다. | |
required | BOOLEAN | 필수여부를 선택합니다. | |
idable | BOOLEAN | 해당 속성의 ID 여부를 선택합니다. | |
labelable | BOOLEAN | Select 컴포넌트에서 필요한 code API에서 label로 사용되는 속성인지에 대한 여부를 지정합니다. | |
treeable | BOOLEAN | 해당 속성으로 tree API에 대한 지원여부를 지정합니다. | |
i18n | BOOLEAN | 해당 속성의 다국어 지원 여부를 지정합니다. | |
indexable | BOOLEAN | 해당 속성에 대해서 인덱싱 설정 여부를 정의합니다. | |
sortable | BOOLEAN | 소팅이 불가능한 인덱싱의 경우에 PID_sort 필드를 만들어서 소팅이 가능하도록 추가 인덱싱 사용여부 설정 | |
facetable | BOOLEAN | Facet 기능을 사용할 수 있도록 추가 인덱싱 작업 설정 | |
analyzer | CODE |
| |
indexNull | BOOLEAN | null 값에 대한 인덱싱 여부 설정 | |
idType | CODE | autoIncrement, UUID, hash | 자동 생성 아이디 유형 설정 |
orderNo | INT | 정렬 순서 | |
length | INT | 최대 길이 설정 | |
encryption | BOOLEAN | 해당 속성의 암호화 여부를 설정합니다. | |
virtual | BOOLEAN | 가상화 속성 여부를 설정합니다. | |
virtualValue | STRING | 가상화 속성의 경우 해당하는 값을 동적으로 추출하여 제공합니다. | |
option | PARTS | API 처리, Validation, UI 옵션 등의 추가 옵션을 설정합니다. | |
relatedPid | REFERENCES | 해당 노드타입의 다른 프로퍼티 타입 중에서 관련이 있는 프로퍼티 타입을 설정합니다. | |
enableCondition | PARTS | 해당 속성의 활성화 여부에 대한 조건을 설정합니다. | |
requiredCondition | PARTS | 해당 속성의 필수값 여부에 대한 조건을 설정합니다. | |
columnId | STRING | pid와 DB의 컬럼명이 다를 경우 DB의 컬럼명을 지정합니다. | |
useRefId | BOOLEAN | DB 저장시 refId를 저장합니다. |