com.google.security.zynamics.binnavi.disassembly.ViewConfiguration.java Source code

Java tutorial

Introduction

Here is the source code for com.google.security.zynamics.binnavi.disassembly.ViewConfiguration.java

Source

/*
Copyright 2014 Google Inc. All Rights Reserved.
    
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 com.google.security.zynamics.binnavi.disassembly;

import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.security.zynamics.binnavi.Database.Interfaces.SQLProvider;
import com.google.security.zynamics.binnavi.Tagging.CTag;
import com.google.security.zynamics.binnavi.disassembly.views.INaviView;
import com.google.security.zynamics.binnavi.disassembly.views.IViewConfiguration;
import com.google.security.zynamics.zylib.disassembly.GraphType;
import com.google.security.zynamics.zylib.disassembly.ViewType;

import java.util.Date;
import java.util.Set;

public class ViewConfiguration implements IViewConfiguration {

    private final SQLProvider provider;
    private final INaviView view;
    private final ViewType type;
    private final int viewId;
    private final String name;
    private final String description;
    private final Date modificationDate;
    private final Date creationDate;
    private final INaviModule module;
    private final Set<CTag> viewTags;
    private final boolean staredState;
    private final INaviProject project;
    private final int edgeCount;
    private final int nodeCount;
    private final GraphType graphType;

    private ViewConfiguration(final Builder builder) {
        provider = builder.provider;
        view = builder.view;
        type = builder.type;
        viewId = builder.viewId; // TODO: critical point we need to distinguish between different
                                 // unsaved views!!!
        name = builder.name;
        description = builder.description;
        modificationDate = builder.modificationDate;
        creationDate = builder.creationDate;
        module = builder.module;
        project = builder.project;
        viewTags = builder.viewTags;
        staredState = builder.staredState;
        edgeCount = builder.edgeCount;
        nodeCount = builder.nodeCount;
        graphType = builder.graphType;
    }

    public static class Builder {

        private final SQLProvider provider;
        private final INaviView view;
        private final ViewType type;
        private int viewId;
        private String name;
        private String description;
        private Date modificationDate;
        private Date creationDate;
        private INaviModule module;
        private Set<CTag> viewTags;
        private boolean staredState;
        private INaviProject project;
        private int edgeCount;
        private int nodeCount;
        private GraphType graphType;

        public Builder(final SQLProvider provider, final INaviView view, final ViewType type) {
            this.provider = Preconditions.checkNotNull(provider, "Error: provider argument can not be null");
            this.view = Preconditions.checkNotNull(view, "Error: view argument can not be null");
            this.type = Preconditions.checkNotNull(type, "Error: type argument can not be null");
        }

        public Builder(final ViewConfiguration configuration, final int viewId) {
            provider = configuration.provider;
            view = configuration.view;
            type = configuration.type;
            this.viewId = viewId;
            name = configuration.name;
            description = configuration.description;
            modificationDate = configuration.modificationDate;
            creationDate = configuration.creationDate;
            module = configuration.module;
            project = configuration.project;
            viewTags = configuration.viewTags;
            staredState = configuration.staredState;
            edgeCount = configuration.edgeCount;
            nodeCount = configuration.nodeCount;
            graphType = configuration.graphType;
        }

        public Builder setId(final int viewId) {
            this.viewId = viewId;
            return this;
        }

        public Builder setName(final String name) {
            this.name = Preconditions.checkNotNull(name, "Error: name argument can not be null");
            return this;
        }

        public ViewConfiguration build() {
            Preconditions.checkArgument(module != null || project != null,
                    "Error: the final module is not final associated to a final module or final a project");
            return new ViewConfiguration(this);
        }

        public Builder setDescription(final String description) {
            this.description = Preconditions.checkNotNull(description,
                    "Error: description argument can not be null");
            return this;
        }

        public Builder setModificationDate(final Date date) {
            modificationDate = Preconditions.checkNotNull(date, "Error: date argument can not be null");
            return this;
        }

        public Builder setCreationDate(final Date date) {
            creationDate = Preconditions.checkNotNull(date, "Error: date argument can not be null");
            return this;
        }

        public Builder setModule(final INaviModule module) {
            this.module = Preconditions.checkNotNull(module, "Error: module argument can not be null");
            return this;
        }

        public Builder setProject(final INaviProject project) {
            this.project = Preconditions.checkNotNull(project, "Error: project argument can not be null");
            return this;
        }

        public Builder setTags(final Set<CTag> tags) {
            viewTags = Preconditions.checkNotNull(tags, "Error: tags argument can not be null");
            return this;
        }

        public Builder setStaredState(final boolean staredState) {
            this.staredState = staredState;
            return this;
        }

        public Builder setUnloadedEdgeCount(final int edgeCount) {
            this.edgeCount = edgeCount;
            return this;
        }

        public Builder setUnloadedNodeCount(final int nodeCount) {
            this.nodeCount = nodeCount;
            return this;
        }

        public Builder setGraphType(final GraphType graphType) {
            this.graphType = Preconditions.checkNotNull(graphType, "Error: graphType argument can not be null");
            return this;
        }
    }

    @Override
    public int getUnloadedEdgeCount() {
        return edgeCount;
    }

    @Override
    public Date getCreationDate() {
        return creationDate;
    }

    @Override
    public String getDescription() {
        return description;
    }

    @Override
    public int getId() {
        return viewId;
    }

    @Override
    public Date getModificationDate() {
        return modificationDate;
    }

    @Override
    public INaviModule getModule() {
        return module;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public INaviProject getProject() {
        return project;
    }

    @Override
    public ViewType getType() {
        return type;
    }

    @Override
    public Set<CTag> getViewTags() {
        return viewTags;
    }

    @Override
    public boolean isStared() {
        return staredState;
    }

    @Override
    public boolean isTagged() {
        return !viewTags.isEmpty();
    }

    @Override
    public boolean isTagged(final CTag tag) {
        return Iterables.tryFind(viewTags, new Predicate<CTag>() {
            @Override
            public boolean apply(final CTag currentTag) {
                return currentTag.getId() == tag.getId();
            }
        }).isPresent();
    }

    @Override
    public void setDescription(final String description) {
        throw new IllegalStateException();
    }

    @Override
    public void setId(final int viewId) {
        throw new IllegalStateException();
    }

    @Override
    public void setName(final String name) {
        throw new IllegalStateException();
    }

    @Override
    public void setNameInternal(final String name) {
        throw new IllegalStateException();
    }

    @Override
    public void setDescriptionInternal(final String description) {
        throw new IllegalStateException();
    }

    @Override
    public void setStaredInternal(final boolean isStared) {
        throw new IllegalStateException();
    }

    @Override
    public void setModificationDateInternal(final Date modificationDate) {
        throw new IllegalStateException();
    }

    @Override
    public void setStared(final boolean stared) {
        throw new IllegalStateException();
    }

    @Override
    public void tagView(final CTag tag) {
        // TODO Auto-generated method stub
    }

    @Override
    public void untagView(final CTag tag) {
        // TODO Auto-generated method stub
    }

    @Override
    public void updateModificationDate() {
        // TODO Auto-generated method stub
    }

    @Override
    public GraphType getUnloadedGraphType() {
        return graphType;
    }

    @Override
    public int getUnloadedNodeCount() {
        return nodeCount;
    }
}