/*
* Copyright 2014 TWO SIGMA OPEN SOURCE, LLC
*
* 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.twosigma.beaker.jvm.object;
import com.twosigma.beaker.widgets.DisplayableWidget;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
public class OutputContainer implements DisplayableWidget {
public final static Logger LOGGER = LoggerFactory.getLogger(OutputContainer.class.getName());
private final List<Object> items;
private final List<String> labels = new ArrayList<>();
private OutputContainerLayoutManager layoutManager = new SimpleLayoutManager();
public OutputContainer() {
this(new ArrayList<>());
}
public OutputContainer(List<Object> items) {
this(items, null);
}
public OutputContainer(List<Object> items, List<String> labels) {
if (items == null || (labels != null && labels.size() != items.size()))
throw new RuntimeException();
this.items = items;
this.labels.clear();
if (labels != null) {
this.labels.addAll(labels);
} else {
for (int i = 0; i < items.size(); i++) {
this.labels.add("");
}
}
}
public void addItem(java.lang.Object item) {
addItem(item, items.size(), null);
}
public void addItem(java.lang.Object item, int index) {
addItem(item, index, null);
}
public void addItem(java.lang.Object item, int index, java.lang.String label) {
items.add(index, item);
labels.add(index, label);
}
public void addItem(Object item, String label) {
addItem(item, items.size(), label);
}
public void removeItem(int index) {
items.remove(index);
labels.remove(index);
}
public OutputContainer leftShift(Object item) {
addItem(item);
return this;
}
public void removeItem(Object itemToRemove) {
removeItem(items.indexOf(itemToRemove));
}
public List<Object> getItems() {
return items;
}
public List<String> getLabels() {
return labels;
}
public void visit(CellVisitor visitor) {
for (Object item : items) {
visitor.visit(item);
}
}
public OutputContainerLayoutManager getLayoutManager() {
return layoutManager;
}
public void setLayoutManager(OutputContainerLayoutManager layoutManager) {
if (layoutManager != null)
this.layoutManager = layoutManager;
}
public static interface CellVisitor {
void visit(Object item);
}
@Override
public void display() {
getLayoutManager().display(this);
}
}