
org.tinygroup.mongodb.model.MongoDBModel Maven / Gradle / Ivy
The newest version!
/**
* Copyright (c) 1997-2013, tinygroup.org ([email protected]).
*
* Licensed under the GPL, Version 3.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.gnu.org/licenses/gpl.html
*
* 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.
* --------------------------------------------------------------------------
* 版权 (c) 1997-2013, tinygroup.org ([email protected]).
*
* 本开源软件遵循 GPL 3.0 协议;
* 如果您不遵循此协议,则不被允许使用此文件。
* 你可以从下面的地址获取完整的协议文本
*
* http://www.gnu.org/licenses/gpl.html
*/
package org.tinygroup.mongodb.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.tinygroup.commons.tools.CollectionUtil;
import org.tinygroup.mongodb.common.BaseObject;
import org.tinygroup.mongodb.common.Field;
import org.tinygroup.mongodb.common.Group;
import org.tinygroup.mongodb.common.ObjectField;
import org.tinygroup.mongodb.common.Operation;
import org.tinygroup.mongodb.common.OperationField;
import org.tinygroup.mongodb.common.OperationGroup;
import org.tinygroup.mongodb.common.View;
import org.tinygroup.mongodb.engine.MongoField;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias("mongo-model")
public class MongoDBModel extends BaseObject {
@XStreamAsAttribute
@XStreamAlias("abstract-model")
Boolean abstractModel;// 是否抽象模型,如果是抽象模型,只能够用来被继承
@XStreamAsAttribute
private String version;// 版本
@XStreamAsAttribute
@XStreamAlias("parent-model-id")
String parentModelId;// 如果是继承自另外的模型,这里可以输入,只能是单继承
@XStreamAlias("operations")
List operations;// 操作
@XStreamAlias("views")
List views;// 视图
@XStreamAlias("groups")
List groups;
transient Map fieldMap=new HashMap();
transient Map objectFieldMap=new HashMap();;
public List getGroups() {
return groups;
}
public void setGroups(List groups) {
this.groups = groups;
}
public Boolean getAbstractModel() {
return abstractModel;
}
public void setAbstractModel(Boolean abstractModel) {
this.abstractModel = abstractModel;
}
public String getParentModelId() {
return parentModelId;
}
public void setParentModelId(String parentModelId) {
this.parentModelId = parentModelId;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public List getOperations() {
if (operations == null)
operations = new ArrayList();
return operations;
}
public void setOperations(List operations) {
this.operations = operations;
}
public List getViews() {
if (views == null)
views = new ArrayList();
return views;
}
public void setViews(List views) {
this.views = views;
}
/**
* 返回操作的字段对应的字段定义列表
*
* @param operation
* @return
*/
public List getOperationFields(Operation operation) {
List fields = new ArrayList();
processOperationGroup(operation.getOperationGroup(), fields);
return fields;
}
private void processOperationGroup(OperationGroup group, List fields) {
for (OperationField operationField : group.getFields()) {
Field field = getField(operationField.getFieldId());
fields.add(field);
}
for (OperationGroup subGroup : group.getOperationGroups()) {
processOperationGroup(subGroup, fields);
}
}
public Field getField(String fieldId) {
if (fieldMap == null) {
fieldMap = new HashMap();
groups();//初始化字段
}
MongoField mongoField = fieldMap.get(fieldId);
if (mongoField != null) {
return mongoField.getField();
}
throw new RuntimeException("实体模型" + title + "中找不到标识是" + fieldId + "的定义");
}
public ObjectField getObjectField(String fieldId) {
if (fieldMap == null) {
fieldMap = new HashMap();
}
MongoField mongoField = fieldMap.get(fieldId);
if (mongoField != null) {
return mongoField.getObjectField();
}
throw new RuntimeException("实体模型" + title + "中找不到标识是" + fieldId + "的定义");
}
public MongoField getMongoField(String fieldId) {
if (fieldMap == null) {
fieldMap = new HashMap();
}
MongoField mongoField = fieldMap.get(fieldId);
if (mongoField != null) {
return mongoField;
}
throw new RuntimeException("实体模型" + title + "中找不到标识是" + fieldId + "的定义");
}
public void groups(){
fieldMap(groups);
}
public void fieldMap(List groups){
if (fieldMap == null) {
fieldMap = new HashMap();
}
if(objectFieldMap==null){
objectFieldMap=new HashMap();
}
for (Group group : groups) {
for (Field field : group.getFields()) {
fieldMap.put(field.getId(), new MongoField(field.getName(),field));
}
List objectFields=group.getObjectFields();
if(!CollectionUtil.isEmpty(objectFields)){
for (ObjectField objectField : objectFields) {
fieldMap.put(objectField.getId(), new MongoField(objectField.getName(),objectField));
objectFieldMap.put(objectField.getName(), objectField);
cycleObjectField(objectField.getName(),objectField);
}
}
}
}
private void cycleObjectField(String objectFieldName,ObjectField objectField){
for (Field field : objectField.getFields()) {
fieldMap.put(field.getId(), new MongoField(objectFieldName+"."+field.getName(),field, objectField));
}
List objectFields=objectField.getObjectFields();
for (ObjectField objectField2 : objectFields) {
objectFieldName=objectFieldName+"."+objectField2.getName();
fieldMap.put(objectField2.getId(), new MongoField(objectFieldName,objectField2));
objectFieldMap.put(objectField2.getName(), objectField2);
cycleObjectField(objectFieldName,objectField2);
}
}
public String getMongoFieldName(String fieldId){
MongoField field=getMongoField(fieldId);
return field.getFieldName();
}
public String getFieldName(String fieldId){
Field field=getField(fieldId);
return field.getName();
}
public ObjectField getObjectFieldByName(String objectFieldName){
return objectFieldMap.get(objectFieldName);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy