class WorkspaceImpl implements Workspace {

    private final transient InstanceContent instanceContent;
    private final transient Lookup lookup;
    private final int id;
    private final ProjectImpl project;
    private final WorkspaceInformationImpl workspaceInformation;
    private final WorkspaceMetaDataImpl workspaceMetaData;

    public WorkspaceImpl(ProjectImpl project, int id) {
        this(project, id, NbBundle.getMessage(WorkspaceImpl.class, "Workspace.default.prefix") + " " + id);
    }

    public WorkspaceImpl(ProjectImpl project, int id, String name, Object... objectsForLookup) {
        this.instanceContent = new InstanceContent();
        this.lookup = new AbstractLookup(instanceContent);
        this.id = id;
        this.project = project;

        //Init Default Content
        workspaceInformation = new WorkspaceInformationImpl(name);
        instanceContent.add(workspaceInformation);
        for (Object o : objectsForLookup) {
            instanceContent.add(o);
        }

        workspaceMetaData = new WorkspaceMetaDataImpl();

        // Models
        Lookup.getDefault().lookupAll(Controller.class).forEach(c -> {
            Model model = c.newModel(this);
            add(model);
        });
    }

    @Override
    public void add(Object instance) {
        instanceContent.add(instance);
    }

    @Override
    public void remove(Object instance) {
        instanceContent.remove(instance);
    }

    @Override
    public Lookup getLookup() {
        return lookup;
    }

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

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

    @Override
    public boolean isOpen() {
        return workspaceInformation.isOpen();
    }

    @Override
    public boolean isClosed() {
        return workspaceInformation.isClosed();
    }

    @Override
    public boolean isInvalid() {
        return workspaceInformation.isInvalid();
    }

    protected void close() {
        workspaceInformation.close();
    }

    protected void open() {
        workspaceInformation.open();
    }

    public String getName() {
        return lookup.lookup(WorkspaceInformationImpl.class).getName();
    }

    @Override
    public boolean hasSource() {
        return workspaceInformation.hasSource();
    }

    @Override
    public String getSource() {
        return workspaceInformation.getSource();
    }

    @Override
    public WorkspaceMetaData getWorkspaceMetadata() {
        return workspaceMetaData;
    }

    @Override
    public String toString() {<FILL_FUNCTION_BODY>}
}

        WorkspaceInformationImpl information = lookup.lookup(WorkspaceInformationImpl.class);
        if (information != null) {
            return information.getName();
        }
        return "null";
    
<no_super_class>