All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.pelle.mango.db.query.BaseServerQuery Maven / Gradle / Ivy

The newest version!
package io.pelle.mango.db.query;

import io.pelle.mango.client.base.vo.IAttributeDescriptor;
import io.pelle.mango.client.base.vo.IEntityVOMapper;
import io.pelle.mango.client.base.vo.IVOEntity;
import io.pelle.mango.client.base.vo.query.BaseQuery;
import io.pelle.mango.client.base.vo.query.Entity;
import io.pelle.mango.client.base.vo.query.IEntity;
import io.pelle.mango.client.base.vo.query.Join;
import io.pelle.mango.db.util.EntityVOMapper;

import java.util.Collection;

public class BaseServerQuery {

	private BaseQuery baseQuery;

	protected BaseServerQuery(BaseQuery baseQuery) {
		this.baseQuery = baseQuery;
	}

	protected String getSelectClause() {
		String result = "";
		String delimiter = "";

		for (IEntity entity : baseQuery.getFroms()) {
			result += delimiter + entity.getAlias();
			delimiter = ", ";
		}

		return result;
	}

	protected String getFromClause(IEntityVOMapper entityVOMapper) {
		String result = "";
		String delimiter = "";

		for (Entity entity : baseQuery.getFroms()) {
			result += delimiter + "" + entityVOMapper.getEntityClass(EntityVOMapper.getInstance().getVOClass(entity.getClassName())).getSimpleName() + " " + entity.getAlias();
			delimiter = ", ";
		}

		return result;
	}

	protected String getOrderClause() {

		StringBuilder result = new StringBuilder();

		if (!baseQuery.getOrderBys().isEmpty()) {
			result.append("ORDER BY ");
		}

		String delimiter = "";
		for (IAttributeDescriptor orderBy : baseQuery.getOrderBys()) {

			result.append(delimiter);
			result.append(orderBy.getAttributeName());
			delimiter = ", ";
		}

		if (!baseQuery.getOrderBys().isEmpty()) {
			result.append(" " + baseQuery.getSortOrder());
		}

		return result.toString();
	}

	private void addJoins(StringBuilder result, String parentAlias, Collection joins) {

		for (Join join : joins) {
			result.append(" ");
			result.append(join.getJoinType() + " " + parentAlias + "." + join.getField() + " " + join.getAlias());
			addJoins(result, join.getAlias(), join.getJoins());
		}
	}

	protected String getWhereClause() {

		StringBuilder result = new StringBuilder();

		if (baseQuery.getWhereExpression().isPresent()) {
			result.append("WHERE ");
			result.append(baseQuery.getWhereExpression().get().getJPQL(baseQuery.getAliasProvider()));
		}

		return result.toString();
	}

	public BaseQuery getBaseQuery() {
		return baseQuery;
	}

	protected String getJoinClause() {

		StringBuilder result = new StringBuilder();

		for (Entity entity : baseQuery.getFroms()) {
			addJoins(result, entity.getAlias(), entity.getJoins());
		}

		return result.toString();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy