package org.orienteer.core.component.widget.document;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.orientechnologies.orient.core.record.impl.ODocument;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.link.InlineFrame;
import org.apache.wicket.markup.html.pages.RedirectPage;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.util.string.interpolator.MapVariableInterpolator;
import org.orienteer.core.component.FAIcon;
import org.orienteer.core.component.FAIconType;
import org.orienteer.core.widget.AbstractWidget;
import org.orienteer.core.widget.Widget;
import ru.ydn.wicket.wicketorientdb.model.ODocumentMapWrapper;
import static org.orienteer.core.module.OWidgetsModule.OPROPERTY_PAGE_URL;
import static org.orienteer.core.module.OWidgetsModule.OPROPERTY_STYLE;
/**
* Widget to embed external web-page.
*/
@Widget(domain="document", oClass = "ExternalPageWidget", id = ExternalPageWidget.WIDGET_TYPE_ID, autoEnable=false)
public class ExternalPageWidget extends AbstractWidget<ODocument> {
public static final String WIDGET_OCLASS_NAME = "ExternalPageWidget";
public static final String WIDGET_TYPE_ID = "external_page";
private String externalPageUrl;
private String style;
public ExternalPageWidget(String id, IModel<ODocument> model, IModel<ODocument> widgetDocumentModel) {
super(id, model, widgetDocumentModel);
}
@Override
protected FAIcon newIcon(String id) {
return new FAIcon(id, FAIconType.external_link);
}
@Override
protected IModel<String> getDefaultTitleModel() {
return new LoadableDetachableModel<String>() {
@Override
protected String load() {
return MapVariableInterpolator.interpolate(externalPageUrl, new ODocumentMapWrapper(getModelObject()));
}
};
}
@Override
protected void onInitialize() {
super.onInitialize();
if (!Strings.isNullOrEmpty(externalPageUrl)) {
String interpolatedUrl = MapVariableInterpolator.interpolate(externalPageUrl, new ODocumentMapWrapper(getModelObject()));
RedirectPage page = new RedirectPage(interpolatedUrl);
final InlineFrame frame = new InlineFrame("embeddedPage", page);
frame.add(new AttributeModifier("style", style));
add(frame);
} else {
add(new EmptyPanel("embeddedPage"));
}
}
@Override
public void loadSettings() {
super.loadSettings();
ODocument doc = getWidgetDocument();
if(doc==null) return;
externalPageUrl = (String)MoreObjects.firstNonNull(doc.field(OPROPERTY_PAGE_URL), "");
style = (String)MoreObjects.firstNonNull(doc.field(OPROPERTY_STYLE), "");
}
@Override
public void saveSettings() {
super.saveSettings();
ODocument doc = getWidgetDocument();
if(doc==null) return;
getDashboardPanel().getDashboardSupport().saveSettings(this, doc);
doc.field(OPROPERTY_PAGE_URL, externalPageUrl);
doc.field(OPROPERTY_STYLE, style);
}
}