/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License, version 2 as published by the Free Software * Foundation. * * You should have received a copy of the GNU General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * * Copyright 2006 - 2016 Pentaho Corporation. All rights reserved. */ package org.pentaho.aggdes.ui.util; import java.util.ArrayList; import java.util.List; import org.pentaho.aggdes.Main; import org.pentaho.aggdes.model.Schema; import org.pentaho.aggdes.model.mondrian.MondrianSchema; import org.pentaho.aggdes.ui.model.UIAggregate; public class AggregateNamingServiceImpl implements AggregateNamingService { public void nameAggregate(UIAggregate newAggregate, Iterable<UIAggregate> existingAggregates, Schema schema) { ArrayList<UIAggregate> newAggregates = new ArrayList<UIAggregate>(); newAggregates.add(newAggregate); nameAggregates(newAggregates, existingAggregates, schema); } public void nameAggregates(List<UIAggregate> newAggregates, Iterable<UIAggregate> existingAggregates, Schema schema) { // get schema name, cleanse it to 10 chars and no special chars String schemaName = ((MondrianSchema)schema).getRolapConnection().getSchema().getName(); schemaName = Main.depunctify(schemaName); if (schemaName.length() > 10) { schemaName = schemaName.substring(0, 10); } // get cube name, cleanse it to 10 chars and no special chars String cubeName = ((MondrianSchema)schema).getRolapCube().getName(); cubeName = Main.depunctify(cubeName); if (cubeName.length() > 10) { cubeName = cubeName.substring(0, 10); } String aggNamePre = schemaName + "_" + cubeName + "_"; int max = 0; // determine maximum agg count if (existingAggregates != null) { for (UIAggregate agg : existingAggregates) { if (agg.getName().startsWith(aggNamePre)) { String val = agg.getName().substring(aggNamePre.length()); try { int curr = Integer.parseInt(val); if (curr > max) { max = curr; } } catch (NumberFormatException e) { // ignore any renaming of the aggs } } } } // rename all aggs for (UIAggregate agg : newAggregates) { agg.setName(aggNamePre + (++max)); } } }