@SuppressWarnings("unchecked") public void write( PredefinedLayout layout, DataOutputStream out ) throws IOException { Version.write( out, Version.VERSION_1_0_7 ); DockLayoutInfo info = layout.getDelegate(); out.writeUTF( layout.getPredefined() ); if( info.getKind() == DockLayoutInfo.Data.BYTE ){ out.writeBoolean( true ); out.write( info.getDataByte() ); } else if( info.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT ){ out.writeBoolean( true ); DockLayout delegate = info.getDataLayout(); String factoryId = delegate.getFactoryID(); DockFactory<DockElement,?,Object> factory = (DockFactory<DockElement,?,Object>)getFactory( factoryId ); if( factory == null ) throw new IOException( "Missing factory: " + factoryId ); out.writeUTF( factoryId ); factory.write( delegate.getData(), out ); } else if( info.getKind() == DockLayoutInfo.Data.NULL ){ out.writeBoolean( false ); } else{ throw new IllegalArgumentException( "Cannot store information as byte[], it is not present as raw byte[] or in an understandable format" ); } }
/** * Gets the name of element which is represented by <code>composition</code>. * @param composition the composition whose element key is searched * @param missingOnly if set, then the key will only be returned if <code>composition</code> * is not fully loaded * @return the key or <code>null</code> */ private String getKey( DockLayoutComposition composition, boolean missingOnly ){ DockLayoutInfo layout = composition.getLayout(); if( layout.getKind() != DockLayoutInfo.Data.DOCK_LAYOUT ) return null; if( !KNOWN.equals( layout.getDataLayout().getFactoryID() )) return null; PredefinedLayout preloaded = (PredefinedLayout)layout.getDataLayout().getData(); if( missingOnly && preloaded.getDelegate().getKind() == DockLayoutInfo.Data.DOCK_LAYOUT ){ // if there is such a Dockable registered then it is not missing... if( stringToElement.containsKey( preloaded.getPredefined() )){ return null; } } String key = preloaded.getPredefined(); return key; }
@SuppressWarnings("unchecked") public void estimateLocations( PredefinedLayout layout, LocationEstimationMap children ){ DockLayoutInfo delegate = layout.getDelegate(); if( delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT ){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory<DockElement,?,Object> factory = (DockFactory<DockElement,?,Object>)getFactory( factoryId ); if( factory != null ){ factory.estimateLocations( delegate.getDataLayout().getData(), children ); } } }
@SuppressWarnings("unchecked") public void estimateLocations( PredefinedLayout layout, LocationEstimationMap children ){ DockLayoutInfo delegate = layout.getDelegate(); if( delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT ){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory<DockElement,?,Object> factory = (DockFactory<DockElement,?,Object>)getFactory( factoryId ); if( factory != null ){ factory.estimateLocations( delegate.getDataLayout().getData(), children ); } } }
/** * Gets the name of element which is represented by <code>composition</code>. * @param composition the composition whose element key is searched * @param missingOnly if set, then the key will only be returned if <code>composition</code> * is not fully loaded * @return the key or <code>null</code> */ private String getKey( DockLayoutComposition composition, boolean missingOnly ){ DockLayoutInfo layout = composition.getLayout(); if( layout.getKind() != DockLayoutInfo.Data.DOCK_LAYOUT ) return null; if( !KNOWN.equals( layout.getDataLayout().getFactoryID() )) return null; PredefinedLayout preloaded = (PredefinedLayout)layout.getDataLayout().getData(); if( missingOnly && preloaded.getDelegate().getKind() == DockLayoutInfo.Data.DOCK_LAYOUT ){ // if there is such a Dockable registered then it is not missing... if( stringToElement.containsKey( preloaded.getPredefined() )){ return null; } } String key = preloaded.getPredefined(); return key; }
public DockElement layout( PredefinedLayout layout, PlaceholderStrategy placeholders ) { DockLayoutInfo delegate = layout.getDelegate(); boolean isLayout = delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT; boolean isNull = delegate.getKind() == DockLayoutInfo.Data.NULL; if( !isLayout && !isNull ){ return null; } DockElement element = stringToElement.get( layout.getPredefined() ); if( element == null && isLayout ){ if( layout.getDelegate() == null ) return null; String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory<?, ?, BackupFactoryData<?>> factory = getBackup( factoryId ); if( factory != null ){ return factory.layout( new BackupFactoryData<Object>( layout.getPredefined(), delegate.getDataLayout().getData()), placeholders); } return null; } setLayout( element, layout, placeholders ); return element; }
@SuppressWarnings("unchecked") public void layoutPerspective( PerspectiveElement element, PredefinedLayout layout, Map<Integer, PerspectiveDockable> children ){ DockLayoutInfo delegate = layout.getDelegate(); if( delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT && shouldLayout( element, perspective )){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory factory = getFactory( factoryId ); if( factory != null ){ factory.layoutPerspective( element, delegate.getDataLayout().getData(), children ); } } }
@SuppressWarnings("unchecked") public void layoutPerspective( PerspectiveElement element, PredefinedLayout layout, Map<Integer, PerspectiveDockable> children ){ DockLayoutInfo delegate = layout.getDelegate(); if( delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT && shouldLayout( element, perspective )){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory factory = getFactory( factoryId ); if( factory != null ){ factory.layoutPerspective( element, delegate.getDataLayout().getData(), children ); } } }
@SuppressWarnings("unchecked") public void write( PredefinedLayout layout, XElement element ) { element.addElement( "replacement" ).addString( "id", layout.getPredefined() ); DockLayoutInfo info = layout.getDelegate(); if( info.getKind() == DockLayoutInfo.Data.XML ){ element.addElement( info.getDataXML() ); } else if( info.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT ){ DockLayout<?> delegate = layout.getDelegate().getDataLayout(); String factoryId = delegate.getFactoryID(); DockFactory<DockElement,?,Object> factory = (DockFactory<DockElement,?,Object>)getFactory( factoryId ); if( factory == null ) throw new XException( "Missing factory: " + factoryId ); XElement xdelegate = element.addElement( "delegate" ); xdelegate.addString( "id", factoryId ); factory.write( delegate.getData(), xdelegate ); } else if( info.getKind() == DockLayoutInfo.Data.NULL ){ // nothing to store } else{ throw new IllegalArgumentException( "Cannot store information as xml, it is neither present as raw xml nor in an understandable format" ); } }
public DockElement layout( PredefinedLayout layout, Map<Integer, Dockable> children, PlaceholderStrategy placeholders ) { DockLayoutInfo delegate = layout.getDelegate(); boolean isLayout = delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT; boolean isNull = delegate.getKind() == DockLayoutInfo.Data.NULL; if( !isLayout && !isNull ){ return null; } DockElement element = stringToElement.get( layout.getPredefined() ); if( element == null && isLayout ){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory<?, ?, BackupFactoryData<?>> factory = getBackup( factoryId ); if( factory != null ){ return factory.layout( new BackupFactoryData<Object>( layout.getPredefined(), delegate.getDataLayout().getData()), children, placeholders ); } return null; } setLayout( element, layout, children, placeholders ); return element; }
public DockElement layout( PredefinedLayout layout, Map<Integer, Dockable> children, PlaceholderStrategy placeholders ) { DockLayoutInfo delegate = layout.getDelegate(); boolean isLayout = delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT; boolean isNull = delegate.getKind() == DockLayoutInfo.Data.NULL; if( !isLayout && !isNull ){ return null; } DockElement element = stringToElement.get( layout.getPredefined() ); if( element == null && isLayout ){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory<?, ?, BackupFactoryData<?>> factory = getBackup( factoryId ); if( factory != null ){ return factory.layout( new BackupFactoryData<Object>( layout.getPredefined(), delegate.getDataLayout().getData()), children, placeholders ); } return null; } setLayout( element, layout, children, placeholders ); return element; }
@SuppressWarnings("unchecked") public PerspectiveElement layoutPerspective( PredefinedLayout layout, Map<Integer, PerspectiveDockable> children ){ if( perspective == null ){ throw new IllegalStateException( "the perspective of this factory is not set, meaning this factory cannot be used handling perspective dependent tasks" ); } DockLayoutInfo delegate = layout.getDelegate(); boolean isLayout = delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT; boolean isNull = delegate.getKind() == DockLayoutInfo.Data.NULL; if( !isLayout && !isNull ){ return null; } PerspectiveElement element = perspective.get( layout.getPredefined() ); if( element == null && isLayout ){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory factory = getBackup( factoryId ); if( factory != null ){ return factory.layoutPerspective(new BackupFactoryData<Object>( layout.getPredefined(), delegate.getDataLayout().getData()), children ); } return null; } layoutPerspective( element, layout, children ); return element; }
@Override protected DockLayoutInfo fillMissing( DockLayoutInfo info ) { DockLayout<?> layout = info.getDataLayout(); if( KNOWN.equals( layout.getFactoryID() )){ PredefinedLayout preloaded = (PredefinedLayout)layout.getData(); DockLayoutInfo delegate = preloaded.getDelegate(); DockLayoutInfo newDelegate = null; if( delegate.getKind() == DockLayoutInfo.Data.BYTE ){ newDelegate = fillMissingStream( preloaded ); } else if( delegate.getKind() == DockLayoutInfo.Data.XML ){ newDelegate = fillMissingXML( preloaded ); } if( newDelegate != null ){ info = new DockLayoutInfo( new DockLayout<PredefinedLayout>( KNOWN, new PredefinedLayout( preloaded.getPredefined(), newDelegate ))); } } return info; }
@SuppressWarnings("unchecked") public PerspectiveElement layoutPerspective( PredefinedLayout layout, Map<Integer, PerspectiveDockable> children ){ if( perspective == null ){ throw new IllegalStateException( "the perspective of this factory is not set, meaning this factory cannot be used handling perspective dependent tasks" ); } DockLayoutInfo delegate = layout.getDelegate(); boolean isLayout = delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT; boolean isNull = delegate.getKind() == DockLayoutInfo.Data.NULL; if( !isLayout && !isNull ){ return null; } PerspectiveElement element = perspective.get( layout.getPredefined() ); if( element == null && isLayout ){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory factory = getBackup( factoryId ); if( factory != null ){ return factory.layoutPerspective(new BackupFactoryData<Object>( layout.getPredefined(), delegate.getDataLayout().getData()), children ); } return null; } layoutPerspective( element, layout, children ); return element; }
@Override protected DockLayoutInfo fillMissing( DockLayoutInfo info ) { DockLayout<?> layout = info.getDataLayout(); if( KNOWN.equals( layout.getFactoryID() )){ PredefinedLayout preloaded = (PredefinedLayout)layout.getData(); DockLayoutInfo delegate = preloaded.getDelegate(); DockLayoutInfo newDelegate = null; if( delegate.getKind() == DockLayoutInfo.Data.BYTE ){ newDelegate = fillMissingStream( preloaded ); } else if( delegate.getKind() == DockLayoutInfo.Data.XML ){ newDelegate = fillMissingXML( preloaded ); } if( newDelegate != null ){ info = new DockLayoutInfo( new DockLayout<PredefinedLayout>( KNOWN, new PredefinedLayout( preloaded.getPredefined(), newDelegate ))); } } return info; }
@SuppressWarnings("unchecked") public void setLayout( DockElement element, PredefinedLayout layout, Map<Integer, Dockable> children, PlaceholderStrategy placeholders ) { DockLayoutInfo delegate = layout.getDelegate(); if( delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT && shouldLayout( element )){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory<DockElement,?,Object> factory = (DockFactory<DockElement,?,Object>)getFactory( factoryId ); if( factory != null ){ DockController controller = element.getController(); try{ if( controller != null ) controller.freezeLayout(); factory.setLayout( element, delegate.getDataLayout().getData(), children, placeholders ); } finally{ if( controller != null ) controller.meltLayout(); } } } }
@SuppressWarnings("unchecked") public void setLayout( DockElement element, PredefinedLayout layout, Map<Integer, Dockable> children, PlaceholderStrategy placeholders ) { DockLayoutInfo delegate = layout.getDelegate(); if( delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT && shouldLayout( element )){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory<DockElement,?,Object> factory = (DockFactory<DockElement,?,Object>)getFactory( factoryId ); if( factory != null ){ DockController controller = element.getController(); try{ if( controller != null ) controller.freezeLayout(); factory.setLayout( element, delegate.getDataLayout().getData(), children, placeholders ); } finally{ if( controller != null ) controller.meltLayout(); } } } }
@SuppressWarnings("unchecked") public void setLayout( DockElement element, PredefinedLayout layout, PlaceholderStrategy placeholders ) { DockLayoutInfo delegate = layout.getDelegate(); if( delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT && shouldLayout( element )){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory<DockElement,?,Object> factory = (DockFactory<DockElement,?,Object>)getFactory( factoryId ); if( factory != null ){ DockController controller = element.getController(); try{ if( controller != null ) controller.freezeLayout(); factory.setLayout( element, delegate.getDataLayout().getData(), placeholders ); } finally{ if( controller != null ) controller.meltLayout(); } } } }
@SuppressWarnings("unchecked") public void setLayout( DockElement element, PredefinedLayout layout, PlaceholderStrategy placeholders ) { DockLayoutInfo delegate = layout.getDelegate(); if( delegate.getKind() == DockLayoutInfo.Data.DOCK_LAYOUT && shouldLayout( element )){ String factoryId = delegate.getDataLayout().getFactoryID(); DockFactory<DockElement,?,Object> factory = (DockFactory<DockElement,?,Object>)getFactory( factoryId ); if( factory != null ){ DockController controller = element.getController(); try{ if( controller != null ) controller.freezeLayout(); factory.setLayout( element, delegate.getDataLayout().getData(), placeholders ); } finally{ if( controller != null ) controller.meltLayout(); } } } }
/** * Tries to read the xml data in <code>layout</code>. * @param layout the layout to read * @return either a new info or <code>null</code> if the data could * not be read */ @SuppressWarnings("unchecked") private DockLayoutInfo fillMissingXML( PredefinedLayout layout ){ XElement xdelegate = layout.getDelegate().getDataXML(); String factoryId = xdelegate.getString( "id" ); Object delegate = null; DockFactory<DockElement,?,Object> factory = (DockFactory<DockElement,?,Object>)getFactory( factoryId ); if( factory == null ){ DockFactory<?,?,BackupFactoryData<?>> backup = getBackup( factoryId ); if( backup != null ){ BackupFactoryData<Object> data = (BackupFactoryData<Object>)backup.read( xdelegate, getPlaceholderStrategy() ); if( data != null ) delegate = data.getData(); } } else{ delegate = factory.read( xdelegate, getPlaceholderStrategy() ); } if( delegate == null ){ return null; } return new DockLayoutInfo( new DockLayout<Object>( factoryId, delegate ) ); }