Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * #%L
   * *********************************************************************************************************************
   *
   * NorthernWind - lightweight CMS
   * http://northernwind.tidalwave.it - hg clone https://bitbucket.org/tidalwave/northernwind-src
   * %%
   * Copyright (C) 2011 - 2013 Tidalwave s.a.s. (http://tidalwave.it)
   * %%
  * *********************************************************************************************************************
  *
  * 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.
  *
  * *********************************************************************************************************************
  *
  * $Id: DefaultLayout.java,v 7f3e9239ae41 2013/07/19 10:00:48 fabrizio $
  *
  * *********************************************************************************************************************
  * #L%
  */
 package it.tidalwave.northernwind.frontend.impl.ui;
 
 import  javax.annotation.Nonnull;
 import java.util.List;
 import java.util.Map;
 import  it.tidalwave.util.As;
 import  it.tidalwave.util.Id;
 import  it.tidalwave.util.NotFoundException;
 import  it.tidalwave.util.Parameters;
 import  it.tidalwave.util.spi.AsSupport;
 import  it.tidalwave.role.Composite.Visitor;
 import  it.tidalwave.role.Composite.VisitorSupport;
 import lombok.Getter;

Author(s):
Fabrizio Giudici
Version:
$Id: DefaultLayout.java,v 7f3e9239ae41 2013/07/19 10:00:48 fabrizio $ /
 
 public class DefaultLayout implements LayoutCloneable
   {
     @Inject @Nonnull
     private ViewFactory viewFactory;
 
     @Nonnull
     private final Id id;
 
     @Nonnull
     private /* final FIXME */ String typeUri;
 
     private final List<Layoutchildren = new ArrayList<>();
 
     private final Map<Id, LayoutchildrenMapById = new HashMap<>();
 
     @Delegate
     private final As asSupport = new AsSupport(this);
 
     // FIXME: make it Immutable
 
    
/
 
     static class CloneVisitor extends VisitorSupport<LayoutDefaultLayout>
       {
         private DefaultLayout rootLayout;
 
         private Stack<DefaultLayoutlayouts = new Stack<>();
 
         @Override
         public void preVisit (final @Nonnull Layout layout)
           {
             final DefaultLayout clone = new DefaultLayout(((DefaultLayout)layout).,
                                                           ((DefaultLayout)layout).);
 
             if ( == null)
               {
                 = clone;
              }
            else
              {
                .peek().add(clone);
              }
            .push(clone);
          }
        @Override
        public void postVisit (final @Nonnull Layout layout)
          {
            .pop();
          }
        @Override @Nonnull
        public DefaultLayout getValue()
          {
            return ;
          }
      };

    
/
    public DefaultLayout()
      {
        this. = new Id("");
        this. = "";
      }

    
Clone - FIXME: public only for InfoglueImporter

    
/
    public DefaultLayout (final @Nonnull Id idfinal @Nonnull String typeUri)
      {
        Parameters.checkNonNull(id"id");
        Parameters.checkNonNull(typeUri"typeUri");
        this. = id;
        this. = typeUri;
      }

    
/
    public DefaultLayout (final @Nonnull Builder builder)
      {
        this. = builder.getId();
        this. = builder.getType();
      }

    
/
    @Override @Nonnull
    public DefaultLayout clone()
      {
        try
          {
            return accept(new CloneVisitor());
          }
        catch (NotFoundException e)
          {
            throw new RuntimeException(e);
          }
      }

    
/
    @Override @Nonnull
    public Layout withOverride (final @Nonnull Layout override)
      {
        final DefaultLayout result = clone();
        result.applyOverride(((DefaultLayout)override).clone());
        return result;
      }

    
/
    @Override @Nonnull
    public Layout withChild (final @Nonnull Layout layout)
      {
        final DefaultLayout clone = clone();
        clone.children.add(layout);
        clone.childrenMapById.put(layout.getId(), layout);
        return clone;
      }

    
/
    @Override @Nonnull
    public LayoutFinder findChildren()
      {
        return new DefaultLayoutFinder();
      }

    
/
    public void add (final @Nonnull Layout layout// FIXME: drop this - used only by the CloneVisitor and Infoglue converter
      {
        .add(layout); // FIXME: clone
        .put(layout.getId(), layout);// FIXME: clone
      }

    
/
    @Override @Nonnull
    public ViewAndController createViewAndController (final @Nonnull SiteNode siteNode)
      throws NotFoundException, HttpStatusException
      {
        return .createViewAndController(siteNode);
      }

    
/
    @Override @Nonnull // TODO: push up to CompositeSupport
    public <Type> Type accept (final @Nonnull Visitor<Layout, Type> visitor)
      throws NotFoundException
      {
        visitor.preVisit(this);
        visitor.visit(this);
        for (final Layout child : )
          {
            child.accept(visitor);
          }
        visitor.postVisit(this);
        return visitor.getValue();
      }

    
/
    @Override @Nonnull
    public String toString()
      {
        return String.format("DefaultLayout(id=%s, typeUri=%s, children.count=%d)".size());
      }

    
/
    // Here everything is already cloned
    private void applyOverride (final @Nonnull Layout override)
      {
        final boolean sameType = this.getTypeUri().equals(override.getTypeUri());
        this. = override.getTypeUri(); // FIXME: don't like this approach, as it requires typeUri non final
        // Complex rule, but it's to keep compatibility with Infoglue.
        if (sameType)
          {
            for (final Layout overridingChild : override.findChildren().results())
              {
                final Layout overriddenChild = .get(overridingChild.getId());
                if (overriddenChild == null)
                  {
                    add(overridingChild);
                  }
                else
                  {
                    .put(overridingChild.getId(), overridingChild);
                    final int i = .indexOf(overriddenChild);
                    if (i < 0)
                      {
                        throw new IllegalArgumentException();
                      }
                    .set(ioverridingChild);
                    //                    ((DefaultLayout)overriddenChild).applyOverride(overridingChild);
                  }
              }
          }
        else
          {
            this..clear();
            this..clear();
            for (final Layout overridingChild : override.findChildren().results())
              {
                add(overridingChild);
              }
          }
      }
  }
New to GrepCode? Check out our FAQ X