private int parentIndex( final HierarchyMetaData existingHierarchy ) { List<LevelMetaData> levels = existingHierarchy.getLevels(); for ( int i = 0; i < levels.size(); i++ ) { LevelMetaData levelMetaData = levels.get( i ); if ( levelMetaData.getName().equals( getParentAttribute() ) ) { return i; } } return -1; }
@Override public boolean isValid( AbstractMetaDataModelNode node ) { LevelMetaData levelMetaData = (LevelMetaData) node; HierarchyMetaData hierarchyMetaData = levelMetaData.getHierarchyMetaData(); List<LevelMetaData> levels = hierarchyMetaData.getLevels(); for ( LevelMetaData ancestor : levels ) { if ( ancestor == node ) { return true; } if ( ancestor.getTimeLevelFormat() == null ) { return false; } } return true; }
@Override public List<String> getValidationMessages( AbstractMetaDataModelNode node ) { List<String> messages = null; LevelMetaData levelMetaData = (LevelMetaData) node; HierarchyMetaData hierarchyMetaData = levelMetaData.getHierarchyMetaData(); List<LevelMetaData> levels = hierarchyMetaData.getLevels(); for ( LevelMetaData ancestor : levels ) { if ( ancestor == node ) { break; } if ( ancestor.getTimeLevelFormat() != null ) { continue; } if ( messages == null ) { messages = new ArrayList<String>(); } messages.add( "Missing Time Level Format in level " + ancestor.getName() ); } return messages; }
/** * Derive the AnalyzerDateFormatAnnotation value by looking at parent levels. **/ public String getFullTimeLevelFormat() { String format = null; HierarchyMetaData hierarchyMetaData = (HierarchyMetaData) getParent(); List<LevelMetaData> levels = hierarchyMetaData.getLevels(); for ( LevelMetaData ancestorOrSelf : levels ) { format = ( format == null ? "" : format + IAnalyzerDateFormatAnnotation.SEPARATOR ) + AnalyzerDateFormatAnnotation.quoteTimeLevelFormat( ancestorOrSelf.getTimeLevelFormat() ); if ( ancestorOrSelf == this ) { break; } } return format; }
/** * Removes level from Hierarchy * * @param levelMetaData level to be removed */ private void removeLevel( final ModelerWorkspace workspace, final LevelMetaData levelMetaData ) { if ( levelMetaData == null ) { return; } HierarchyMetaData hierarchyMetaData = levelMetaData.getHierarchyMetaData(); if ( hierarchyMetaData.getLevels().size() == 1 ) { // Remove the hierarchy and dimension if this is the only level created (ex. auto modeling) removeAutoLevel( workspace, levelMetaData, true ); } else if ( hierarchyMetaData.contains( levelMetaData ) ) { hierarchyMetaData.remove( levelMetaData ); } }
protected void removeDuplicateLevel( final LevelMetaData levelMetaData ) { if ( null == levelMetaData || null == levelMetaData.getHierarchyMetaData() ) { return; } HierarchyMetaData hierarchyMetaData = levelMetaData.getHierarchyMetaData(); for ( LevelMetaData duplicateLevel : hierarchyMetaData.getLevels() ) { if ( levelMetaData.getName().equals( duplicateLevel.getName() ) && duplicateLevel != levelMetaData ) { hierarchyMetaData.remove( duplicateLevel ); break; } } } }
public void updateDescendantAnalyzerDateFormatAnnotations() { HierarchyMetaData hierarchyMetaData = (HierarchyMetaData) getParent(); List<LevelMetaData> levels = hierarchyMetaData.getLevels(); String format = null, timeLevelFormat; AnalyzerDateFormatAnnotation annotation; Map<String, IMemberAnnotation> annotations; String key = IAnalyzerDateFormatAnnotation.NAME; boolean isDescendant = false; for ( LevelMetaData descendant : levels ) { timeLevelFormat = descendant.getTimeLevelFormat(); format = ( format == null ? "" : format + IAnalyzerDateFormatAnnotation.SEPARATOR ) + AnalyzerDateFormatAnnotation.quoteTimeLevelFormat( timeLevelFormat ); if ( !isDescendant ) { if ( descendant == this ) { isDescendant = true; } continue; } annotations = descendant.annotations; if ( !annotations.containsKey( key ) ) { continue; } annotation = (AnalyzerDateFormatAnnotation) annotations.get( key ); annotation.setValue( format ); } }
private boolean isAutoModeled( final ModelerWorkspace workspace ) { try { if ( ( getGeoType() != null ) && StringUtils .equals( workspace.getGeoContext().getDimensionName(), getDimension() ) ) { return true; } HierarchyMetaData hierarchy = locateHierarchy( workspace, getDimension() ); return hierarchy != null && hierarchy.size() == 1 && hierarchy.getLevels().get( 0 ).getName().equals( hierarchy.getName() ); } catch ( Exception e ) { return false; } }
@Bindable public void setTimeLevelFormat( String format ) { if ( "".equals( format ) ) { format = null; } if ( format == null && timeLevelFormat == null ) { return; } if ( format != null && timeLevelFormat != null && format.equals( timeLevelFormat ) ) { return; } if ( getNode() != null ) { getNode().setTimeLevelFormat( format ); } LevelMetaData levelMetaData = (LevelMetaData) getNode(); HierarchyMetaData hierarchyMetaData = levelMetaData.getHierarchyMetaData(); List<LevelMetaData> levels = hierarchyMetaData.getLevels(); boolean isDescendant = false; for ( LevelMetaData descendant : levels ) { if ( !isDescendant ) { if ( descendant == levelMetaData ) { isDescendant = true; } continue; } descendant.validateNode(); } showValidations(); timeLevelFormat = format; }
protected void removeAutoLevel( final ModelerWorkspace workspace, final LevelMetaData levelMetaData, boolean force ) { if ( levelMetaData == null ) { return; } HierarchyMetaData hierarchy = levelMetaData.getHierarchyMetaData(); DimensionMetaData dimension = hierarchy.getDimensionMetaData(); if ( hierarchy.getLevels().size() > 1 || ( !force && dimension.getMemberAnnotations().containsKey( GeneratedbyMemberAnnotation.GEBERATED_BY_STRING ) ) ) { return; } if ( dimension.contains( hierarchy ) ) { dimension.remove( hierarchy ); } if ( dimension.size() > 0 ) { return; } DimensionMetaDataCollection dimensions = workspace.getModel().getDimensions(); if ( dimensions.contains( dimension ) ) { dimensions.remove( dimension ); } }