/** * Copyright (c) 2011-2014, James Zhan 詹波 (jfinal@126.com). * * 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.jfinal.plugin.activerecord; import java.util.Map; import com.jfinal.kit.StringKit; /** * Table save the table meta info like column name and column type. */ public class Table { private String name; private String primaryKey; private String secondaryKey = null; private Map<String, Class<?>> columnTypeMap; // config.containerFactory.getAttrsMap(); private Class<? extends Model<?>> modelClass; public Table(String name, Class<? extends Model<?>> modelClass) { if (StringKit.isBlank(name)) throw new IllegalArgumentException("Table name can not be blank."); if (modelClass == null) throw new IllegalArgumentException("Model class can not be null."); this.name = name.trim(); this.modelClass = modelClass; } public Table(String name, String primaryKey, Class<? extends Model<?>> modelClass) { if (StringKit.isBlank(name)) throw new IllegalArgumentException("Table name can not be blank."); if (StringKit.isBlank(primaryKey)) throw new IllegalArgumentException("Primary key can not be blank."); if (modelClass == null) throw new IllegalArgumentException("Model class can not be null."); this.name = name.trim(); setPrimaryKey(primaryKey.trim()); // this.primaryKey = primaryKey.trim(); this.modelClass = modelClass; } void setPrimaryKey(String primaryKey) { String[] keyArr = primaryKey.split(","); if (keyArr.length > 1) { if (StringKit.isBlank(keyArr[0]) || StringKit.isBlank(keyArr[1])) throw new IllegalArgumentException("The composite primary key can not be blank."); this.primaryKey = keyArr[0].trim(); this.secondaryKey = keyArr[1].trim(); } else { this.primaryKey = primaryKey; } } void setColumnTypeMap(Map<String, Class<?>> columnTypeMap) { if (columnTypeMap == null) throw new IllegalArgumentException("columnTypeMap can not be null"); this.columnTypeMap = columnTypeMap; } public String getName() { return name; } public void setColumnType(String columnLabel, Class<?> columnType) { columnTypeMap.put(columnLabel, columnType); } public Class<?> getColumnType(String columnLabel) { return columnTypeMap.get(columnLabel); } /** * Model.save() need know what columns belongs to himself that he can saving to db. * Think about auto saving the related table's column in the future. */ public boolean hasColumnLabel(String columnLabel) { return columnTypeMap.containsKey(columnLabel); } /** * update() and delete() need this method. */ public String getPrimaryKey() { return primaryKey; } public String getSecondaryKey() { return secondaryKey; } public Class<? extends Model<?>> getModelClass() { return modelClass; } }