Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.glaf.core.service.impl; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ibatis.session.RowBounds; import org.apache.ibatis.session.SqlSession; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.glaf.core.domain.ColumnDefinition; import com.glaf.core.domain.QueryDefinition; import com.glaf.core.domain.TableDefinition; import com.glaf.core.id.IdGenerator; import com.glaf.core.mapper.ColumnDefinitionMapper; import com.glaf.core.mapper.QueryDefinitionMapper; import com.glaf.core.mapper.TableDefinitionMapper; import com.glaf.core.query.QueryDefinitionQuery; import com.glaf.core.query.TableDefinitionQuery; import com.glaf.core.service.ITableDefinitionService; import com.glaf.core.util.StringTools; @Service("tableDefinitionService") @Transactional(readOnly = true) public class MxTableDefinitionServiceImpl implements ITableDefinitionService { protected final static Log logger = LogFactory.getLog(MxTableDefinitionServiceImpl.class); protected ColumnDefinitionMapper columnDefinitionMapper; protected IdGenerator idGenerator; protected QueryDefinitionMapper queryDefinitionMapper; protected SqlSession sqlSession; protected TableDefinitionMapper tableDefinitionMapper; public MxTableDefinitionServiceImpl() { } public int count(TableDefinitionQuery query) { if (StringUtils.isEmpty(query.getType())) { throw new RuntimeException(" type is null "); } return tableDefinitionMapper.getTableDefinitionCount(query); } @Transactional public void deleteColumn(String columnId) { columnDefinitionMapper.deleteColumnDefinitionById(columnId); } /** * * * @param tableName */ @Transactional public void deleteTable(String tableName) { columnDefinitionMapper.deleteColumnDefinitionByTableName(tableName); tableDefinitionMapper.deleteTableDefinitionById(tableName); } public ColumnDefinition getColumnDefinition(String columnId) { return columnDefinitionMapper.getColumnDefinitionById(columnId); } public List<ColumnDefinition> getColumnDefinitionsByTableName(String tableName) { TableDefinition tableDefinition = this.getTableDefinition(tableName); if (tableDefinition != null) { return tableDefinition.getColumns(); } return null; } public List<ColumnDefinition> getColumnDefinitionsByTargetId(String targetId) { return columnDefinitionMapper.getColumnDefinitionsByTargetId(targetId); } public List<TableDefinition> getTableColumnsCount(TableDefinitionQuery query) { List<TableDefinition> list = tableDefinitionMapper.getTableColumnsCount(query); return list; } public TableDefinition getTableDefinition(String tableName) { if (tableName == null) { return null; } TableDefinition tableDefinition = tableDefinitionMapper.getTableDefinitionById(tableName); if (tableDefinition != null) { if (StringUtils.isNotEmpty(tableDefinition.getQueryIds())) { QueryDefinitionQuery query = new QueryDefinitionQuery(); List<String> queryIds = StringTools.split(tableDefinition.getQueryIds()); query.queryIds(queryIds); List<QueryDefinition> list = queryDefinitionMapper.getQueryDefinitions(query); if (list != null && !list.isEmpty()) { for (QueryDefinition q : list) { tableDefinition.addQuery(q); } } } if (StringUtils.isNotEmpty(tableDefinition.getAggregationQueryIds())) { QueryDefinitionQuery query = new QueryDefinitionQuery(); List<String> queryIds = StringTools.split(tableDefinition.getAggregationQueryIds()); query.queryIds(queryIds); List<QueryDefinition> list = queryDefinitionMapper.getQueryDefinitions(query); if (list != null && !list.isEmpty()) { for (QueryDefinition q : list) { tableDefinition.addAggregationQuery(q); } } } List<ColumnDefinition> columns = columnDefinitionMapper.getColumnDefinitionsByTableName(tableName); if (columns != null && !columns.isEmpty()) { tableDefinition.setColumns(columns); for (ColumnDefinition column : columns) { if (column.isPrimaryKey()) { logger.debug("##PrimaryKey:" + column.toJsonObject().toJSONString()); tableDefinition.setIdColumn(column); columns.remove(column); break; } } } } return tableDefinition; } /** * ??? * * @return */ public int getTableDefinitionCountByQueryCriteria(TableDefinitionQuery query) { if (StringUtils.isEmpty(query.getType())) { throw new RuntimeException(" type is null "); } return tableDefinitionMapper.getTableDefinitionCount(query); } /** * ???? * * @return */ public List<TableDefinition> getTableDefinitionsByQueryCriteria(int start, int pageSize, TableDefinitionQuery query) { if (StringUtils.isEmpty(query.getType())) { throw new RuntimeException(" type is null "); } RowBounds rowBounds = new RowBounds(start, pageSize); List<TableDefinition> rows = sqlSession.selectList("getTableDefinitions", query, rowBounds); return rows; } public List<TableDefinition> list(TableDefinitionQuery query) { if (StringUtils.isEmpty(query.getType())) { throw new RuntimeException(" type is null "); } List<TableDefinition> list = tableDefinitionMapper.getTableDefinitions(query); return list; } @Transactional public void save(TableDefinition tableDefinition) { String tableName = tableDefinition.getTableName(); tableName = tableName.toUpperCase(); tableDefinition.setTableName(tableName); TableDefinition table = this.getTableDefinition(tableDefinition.getTableName()); if (table == null) { tableDefinition.setCreateTime(new Date()); tableDefinition.setRevision(1); if (tableDefinition.getColumns() != null && !tableDefinition.getColumns().isEmpty()) { tableDefinition.setColumnQty(tableDefinition.getColumns().size()); } tableDefinitionMapper.insertTableDefinition(tableDefinition); } else { if (tableDefinition.getColumns() != null && !tableDefinition.getColumns().isEmpty()) { tableDefinition.setColumnQty(tableDefinition.getColumns().size()); } tableDefinition.setRevision(tableDefinition.getRevision() + 1); tableDefinitionMapper.updateTableDefinition(tableDefinition); } if (tableDefinition.getColumns() != null && !tableDefinition.getColumns().isEmpty()) { for (ColumnDefinition column : tableDefinition.getColumns()) { String id = (tableName + "_" + column.getColumnName()).toUpperCase(); if (columnDefinitionMapper.getColumnDefinitionById(id) == null) { column.setId(id); column.setTableName(tableName); if ("SYS".equals(tableDefinition.getType())) { column.setSystemFlag("1"); } columnDefinitionMapper.insertColumnDefinition(column); } else { columnDefinitionMapper.updateColumnDefinition(column); } } } if ("SYS".equals(tableDefinition.getType())) { String id = (tableDefinition.getTableName() + "_ID").toUpperCase(); if (columnDefinitionMapper.getColumnDefinitionById(id) == null) { ColumnDefinition column = new ColumnDefinition(); column.setColumnName("ID"); column.setId(id); column.setName("id"); column.setTitle("ID"); column.setPrimaryKey(true); column.setJavaType("String"); column.setLength(50); column.setSystemFlag("1"); column.setTableName(tableName); columnDefinitionMapper.insertColumnDefinition(column); } } } @Transactional public void saveColumn(String tableName, ColumnDefinition columnDefinition) { tableName = tableName.toUpperCase(); TableDefinition tableDefinition = this.getTableDefinition(tableName); if (tableDefinition != null) { Set<String> cols = new HashSet<String>(); List<ColumnDefinition> columns = tableDefinition.getColumns(); boolean exists = false; if (columns != null && !columns.isEmpty()) { for (ColumnDefinition column : columns) { if (StringUtils.equalsIgnoreCase(column.getColumnName(), columnDefinition.getColumnName())) { column.setValueExpression(columnDefinition.getValueExpression()); column.setFormula(columnDefinition.getFormula()); column.setName(columnDefinition.getName()); column.setTitle(columnDefinition.getTitle()); column.setEnglishTitle(columnDefinition.getEnglishTitle()); column.setHeight(columnDefinition.getHeight()); column.setLength(columnDefinition.getLength()); column.setTranslator(columnDefinition.getTranslator()); column.setPrecision(columnDefinition.getPrecision()); column.setScale(columnDefinition.getScale()); column.setAlign(columnDefinition.getAlign()); column.setCollection(columnDefinition.isCollection()); column.setFrozen(columnDefinition.isFrozen()); column.setNullable(columnDefinition.isNullable()); column.setSortable(columnDefinition.isSortable()); column.setDisplayType(columnDefinition.getDisplayType()); column.setDiscriminator(columnDefinition.getDiscriminator()); column.setFormatter(columnDefinition.getFormatter()); column.setLink(columnDefinition.getLink()); column.setOrdinal(columnDefinition.getOrdinal()); column.setRegex(columnDefinition.getRegex()); column.setSortType(columnDefinition.getSortType()); column.setSummaryExpr(columnDefinition.getSummaryExpr()); column.setSummaryType(columnDefinition.getSummaryType()); columnDefinitionMapper.updateColumnDefinition(column); exists = true; break; } } } if (!exists) { String id = (tableName + "_" + columnDefinition.getColumnName()).toUpperCase(); if (!cols.contains(id)) { columnDefinition.setId(id); columnDefinition.setTableName(tableName); columnDefinitionMapper.insertColumnDefinition(columnDefinition); cols.add(id); } } } } @Transactional public void saveColumns(String targetId, List<ColumnDefinition> columnDefinitions) { columnDefinitionMapper.deleteColumnDefinitionByTargetId(targetId); if (columnDefinitions != null && !columnDefinitions.isEmpty()) { for (ColumnDefinition col : columnDefinitions) { if (StringUtils.isEmpty(col.getId())) { col.setId(col.getTargetId() + "_" + col.getColumnName()); } col.setTargetId(targetId); columnDefinitionMapper.insertColumnDefinition(col); } } } @Transactional public void saveSystemTable(String tableName, List<ColumnDefinition> rows) { tableName = tableName.toUpperCase(); TableDefinition table = this.getTableDefinition(tableName); if (table == null) { table = new TableDefinition(); table.setType("SYS"); table.setSystemFlag("1"); table.setTableName(tableName.toUpperCase()); table.setColumnQty(rows.size()); table.setCreateBy("system"); table.setCreateTime(new Date()); table.setRevision(1); table.setDeleteFlag(0); table.setLocked(0); table.setEnglishTitle(tableName); tableDefinitionMapper.insertTableDefinition(table); } else { table.setColumnQty(rows.size()); tableDefinitionMapper.updateTableDefinition(table); } columnDefinitionMapper.deleteColumnDefinitionByTableName(tableName); Set<String> cols = new HashSet<String>(); for (ColumnDefinition column : rows) { String id = (tableName + "_" + column.getColumnName()).toUpperCase(); if (!cols.contains(id)) { column.setId(id); column.setSystemFlag("1"); column.setTableName(tableName); columnDefinitionMapper.insertColumnDefinition(column); cols.add(id); } } } @javax.annotation.Resource public void setColumnDefinitionMapper(ColumnDefinitionMapper columnDefinitionMapper) { this.columnDefinitionMapper = columnDefinitionMapper; } @javax.annotation.Resource public void setIdGenerator(IdGenerator idGenerator) { this.idGenerator = idGenerator; } @javax.annotation.Resource public void setQueryDefinitionMapper(QueryDefinitionMapper queryDefinitionMapper) { this.queryDefinitionMapper = queryDefinitionMapper; } @javax.annotation.Resource public void setSqlSession(SqlSession sqlSession) { this.sqlSession = sqlSession; } @javax.annotation.Resource public void setTableDefinitionMapper(TableDefinitionMapper tableDefinitionMapper) { this.tableDefinitionMapper = tableDefinitionMapper; } }