/* * Copyright 2013 Eediom Inc. * * 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 org.araqne.logdb.client; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 테이블 설정을 표현합니다. * * @author xeraph@eediom.com * */ public class TableSchemaInfo { private String name; private int id; private StorageEngineConfig primaryStorage; private StorageEngineConfig replicaStorage; private List<StorageEngineConfig> secondaryStorages = new ArrayList<StorageEngineConfig>(); private List<FieldInfo> fieldDefinitions; private Map<String, String> metadata = new HashMap<String, String>(); public TableSchemaInfo() { } /** * @param name * 테이블 이름 * @param type * 주 스토리지 엔진 타입 */ public TableSchemaInfo(String name, String type) { this.name = name; this.primaryStorage = new StorageEngineConfig(type); } @Deprecated public TableSchemaInfo(String name, Map<String, String> metadata) { this.name = name; this.metadata = metadata; } public TableSchemaInfo clone() { TableSchemaInfo c = new TableSchemaInfo(); c.setName(name); c.setId(id); c.setPrimaryStorage(primaryStorage.clone()); if (replicaStorage != null) c.setReplicaStorage(replicaStorage.clone()); List<StorageEngineConfig> l = new ArrayList<StorageEngineConfig>(); for (StorageEngineConfig s : secondaryStorages) l.add(s.clone()); c.setSecondaryStorages(l); c.setFieldDefinitions(cloneFieldDefinitions(fieldDefinitions)); if (metadata != null) c.setMetadata(new HashMap<String, String>(metadata)); return c; } private List<FieldInfo> cloneFieldDefinitions(List<FieldInfo> l) { if (l == null) return null; List<FieldInfo> cloned = new ArrayList<FieldInfo>(); for (FieldInfo d : l) cloned.add(FieldInfo.parse(d.toString())); return cloned; } /** * 테이블 이름을 반환합니다. * * @return 테이블 이름 */ public String getName() { return name; } /** * 테이블 이름을 설정합니다. * * @param name * 테이블 이름 */ public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public StorageEngineConfig getPrimaryStorage() { return primaryStorage; } public void setPrimaryStorage(StorageEngineConfig primaryStorage) { this.primaryStorage = primaryStorage; } public StorageEngineConfig getReplicaStorage() { return replicaStorage; } public void setReplicaStorage(StorageEngineConfig replicaStorage) { this.replicaStorage = replicaStorage; } public List<StorageEngineConfig> getSecondaryStorages() { return secondaryStorages; } public void setSecondaryStorages(List<StorageEngineConfig> secondaryStorages) { this.secondaryStorages = secondaryStorages; } /** * 테이블 메타데이터를 반환합니다. * * @return 테이블 메타데이터 */ public Map<String, String> getMetadata() { return metadata; } /** * 테이블 메타데이터를 설정합니다. * * @param metadata * 테이블 메타데이터 */ public void setMetadata(Map<String, String> metadata) { this.metadata = metadata; } /** * 스키마를 구성하는 필드 정의 목록을 반환합니다. * * @return 필드 정의 목록 */ public List<FieldInfo> getFieldDefinitions() { return fieldDefinitions; } /** * 스키마를 구성하는 필드 정의 목록을 설정합니다. * * @param fieldDefinitions * 필드 정의 목록 */ public void setFieldDefinitions(List<FieldInfo> fieldDefinitions) { this.fieldDefinitions = fieldDefinitions; } public Map<String, Object> toMap() { Map<String, Object> m = new HashMap<String, Object>(); m.put("table", name); m.put("id", id); m.put("type", primaryStorage.getType()); m.put("base_path", primaryStorage.getBasePath()); m.put("primary_configs", serialize(primaryStorage)); m.put("replica_configs", serialize(replicaStorage)); m.put("metadata", metadata); return m; } private Map<String, Object> serialize(StorageEngineConfig c) { if (c == null) return null; Map<String, Object> m = new HashMap<String, Object>(); for (TableConfig t : c.getConfigs()) { if (t.getValues().size() <= 1) m.put(t.getKey(), t.getValue()); else m.put(t.getKey(), t.getValues()); } return m; } @Override public String toString() { String replica = ""; if (replicaStorage != null) replica = ", replica={" + replicaStorage + "}"; String m = ""; if (metadata != null && !metadata.isEmpty()) m = ", metadata=" + metadata; return "name=" + name + ", primary={" + primaryStorage + "}" + replica + m; } }