/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * 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 org.dashbuilder.dataset.group; import java.util.List; import java.util.ArrayList; import org.dashbuilder.dataset.DataSetOpType; import org.dashbuilder.dataset.impl.AbstractDataSetOp; /** * A data set group operation. */ public class DataSetGroup extends AbstractDataSetOp { protected boolean join = false; protected ColumnGroup columnGroup = null; protected List<GroupFunction> groupFunctionList = new ArrayList<GroupFunction>(); protected List<Interval> selectedIntervalList = new ArrayList<Interval>(); public DataSetOpType getType() { return DataSetOpType.GROUP; } public void setColumnGroup(ColumnGroup columnGroup) { this.columnGroup = columnGroup; } public void addGroupFunction(GroupFunction... groupFunctions) { for (GroupFunction groupFunction : groupFunctions) { groupFunctionList.add(groupFunction); } } public ColumnGroup getColumnGroup() { return columnGroup; } public List<GroupFunction> getGroupFunctions() { return groupFunctionList; } public GroupFunction getGroupFunction(String columnId) { for (GroupFunction gf : groupFunctionList) { if (columnId != null && columnId.equals(gf.getColumnId())) { return gf; } } for (GroupFunction gf : groupFunctionList) { if (columnId != null && columnId.equals(gf.getSourceId())) { return gf; } } return null; } public Integer getGroupFunctionIdx(GroupFunction groupFunction) { for (int i=0; i<groupFunctionList.size(); i++) { GroupFunction gf = groupFunctionList.get(i); if (gf.equals(groupFunction)) { return i; } } return null; } public void addSelectedIntervalNames(String... names) { for (String name : names) { Interval interval = new Interval(name); selectedIntervalList.add(interval); } } public void setSelectedIntervalList(List<Interval> intervalList) { if (intervalList == null) selectedIntervalList.clear(); else selectedIntervalList = intervalList; } public List<Interval> getSelectedIntervalList() { return selectedIntervalList; } public boolean isSelect() { return !selectedIntervalList.isEmpty(); } public boolean isJoin() { return join; } public void setJoin(boolean join) { this.join = join; } public List<GroupFunction> getAggregationFunctions() { List<GroupFunction> result = new ArrayList<GroupFunction>(); for (GroupFunction groupFunction : groupFunctionList) { if (groupFunction.getFunction() != null) { result.add(groupFunction); } } return result; } public DataSetGroup cloneInstance() { DataSetGroup clone = new DataSetGroup(); clone.dataSetUUID = dataSetUUID; if (columnGroup != null) clone.columnGroup = columnGroup.cloneInstance(); clone.join = join; clone.selectedIntervalList = new ArrayList(); for (Interval interval : selectedIntervalList) { clone.selectedIntervalList.add(interval.cloneInstance()); } clone.groupFunctionList = new ArrayList(); for (GroupFunction groupFunction : groupFunctionList) { clone.groupFunctionList.add(groupFunction.cloneInstance()); } return clone; } public boolean equals(Object obj) { if (obj == this) return true; try { DataSetGroup other = (DataSetGroup) obj; if (join != other.join) return false; if (columnGroup != null && other.columnGroup == null) return false; if (columnGroup == null && other.columnGroup != null) return false; if (columnGroup != null && !columnGroup.equals(other.columnGroup)) return false; if (groupFunctionList.size() != other.groupFunctionList.size()) return false; if (selectedIntervalList.size() != other.selectedIntervalList.size()) return false; for (int i = 0; i < groupFunctionList.size(); i++) { GroupFunction el = groupFunctionList.get(i); if (!other.groupFunctionList.contains(el)) return false; } for (int i = 0; i < selectedIntervalList.size(); i++) { Interval el = selectedIntervalList.get(i); if (!other.selectedIntervalList.contains(el)) return false; } return true; } catch (ClassCastException e) { return false; } } public String toString() { StringBuilder out = new StringBuilder(); if (columnGroup != null) { out.append("group(").append(columnGroup).append(") "); if (join) out.append(".join()"); } if (!selectedIntervalList.isEmpty()) { out.append("select("); for (Interval interval : selectedIntervalList) { out.append(interval.getName()).append(" "); } out.append(")"); } return out.toString(); } }