
org.efaps.db.print.LinkToSelectPart Maven / Gradle / Ivy
/*
* Copyright 2003 - 2013 The eFaps Team
*
* 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.
*
* Revision: $Rev: 9035 $
* Last Changed: $Date: 2013-03-12 19:52:55 -0500 (Tue, 12 Mar 2013) $
* Last Changed By: $Author: [email protected] $
*/
package org.efaps.db.print;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.efaps.admin.datamodel.Attribute;
import org.efaps.admin.datamodel.Type;
import org.efaps.db.wrapper.SQLSelect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Select Part for linkto[ATTRIBUTENAME]
.
*
* @author The eFaps Team
* @version $Id: LinkToSelectPart.java 9035 2013-03-13 00:52:55Z [email protected] $
*/
public class LinkToSelectPart
extends AbstractSelectPart
{
/**
* Logging instance used in this class.
*/
private static final Logger LOG = LoggerFactory.getLogger(OneSelect.class);
/**
* Name of the Attribute the link to is based on.
*/
private final String attrName;
/**
* Type the {@link #attrName} belongs to.
*/
private final Type type;
/**
* index of the id Column.
*/
private int idColumnIndex;
/**
* List of ids retrieved from the ResultSet returned
* from the eFaps database. It represent one row in a result set.
*/
private final List idList = new ArrayList();
/**
* @param _attrName attribute name
* @param _type type
*/
public LinkToSelectPart(final String _attrName,
final Type _type)
{
this.attrName = _attrName;
this.type = _type;
}
/**
* {@inheritDoc}
*/
@Override
public int join(final OneSelect _oneSelect,
final SQLSelect _select,
final int _relIndex)
{
// it must be evaluated if the attribute that is used as the base for the linkto is inside a child table
final Attribute attr = this.type.getAttribute(this.attrName);
if (attr == null) {
LinkToSelectPart.LOG.error("Could not find an Attribute with name '{}' for type:{}", this.attrName,
this.type);
}
Integer relIndex = _relIndex;
if (attr != null && !attr.getTable().equals(this.type.getMainTable())) {
final String childTableName = attr.getTable().getSqlTable();
relIndex = _oneSelect.getTableIndex(childTableName, "ID", _relIndex);
if (relIndex == null) {
relIndex = _oneSelect.getNewTableIndex(childTableName, "ID", _relIndex);
_select.leftJoin(childTableName, relIndex, "ID", _relIndex, "ID");
}
}
Integer ret;
final String tableName = attr.getLink().getMainTable().getSqlTable();
final String column = attr.getSqlColNames().get(0);
ret = _oneSelect.getTableIndex(tableName, column, relIndex);
if (ret == null) {
ret = _oneSelect.getNewTableIndex(tableName, column, relIndex);
_select.leftJoin(tableName, ret, "ID", relIndex, column);
}
_select.column(ret, "ID");
this.idColumnIndex = _select.getColumns().size();
return ret;
}
/**
* {@inheritDoc}
*/
@Override
public Type getType()
{
final Attribute attr = this.type.getAttribute(this.attrName);
if (attr == null) {
LinkToSelectPart.LOG.error("Could not find an Attribute with name '{}' for type:{}", this.attrName,
this.type);
}
final Type ret = attr.getLink();
if (ret == null) {
LinkToSelectPart.LOG.error("No link for Attribute '{}'", attr);
}
return ret;
}
/**
* {@inheritDoc}
*/
@Override
public void addObject(final ResultSet _rs)
throws SQLException
{
this.idList.add(_rs.getLong(this.idColumnIndex));
}
/**
* {@inheritDoc}
*/
@Override
public Object getObject()
{
return this.idList;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy