List of usage examples for org.apache.wicket Component add
public Component add(final Behavior... behaviors)
From source file:org.efaps.ui.wicket.components.table.row.RowPanel.java
License:Apache License
/** * @param _wicketId wicket id for this component * @param _model model for this component * @param _tablePanel tablepanel this row is in * @param _updateListMenu must the listmenu be updated * @param _idx index of the current row//from ww w .ja v a2s .c om * @throws EFapsException on error * */ public RowPanel(final String _wicketId, final IModel<UIRow> _model, final TablePanel _tablePanel, final boolean _updateListMenu, final int _idx) throws EFapsException { super(_wicketId, _model); final UIRow uirow = (UIRow) super.getDefaultModelObject(); final UITable uiTable = (UITable) _tablePanel.getDefaultModelObject(); int i = uiTable.getTableId(); final RepeatingView cellRepeater = new RepeatingView("cellRepeater"); add(cellRepeater); boolean firstCell = false; if (uiTable.isShowCheckBoxes()) { final CheckBoxField checkbox = new CheckBoxField(cellRepeater.newChildId(), uirow.getInstanceKey()); checkbox.setOutputMarkupId(true); checkbox.add(AttributeModifier.append("class", "eFapsTableCheckBoxCell eFapsTableCellClear")); cellRepeater.add(checkbox); i++; firstCell = true; } if (uiTable.isEditable()) { final AjaxAddRemoveRowPanel remove = new AjaxAddRemoveRowPanel(cellRepeater.newChildId(), Model.of(uiTable), this); remove.setOutputMarkupId(true); remove.add(AttributeModifier.append("class", "eFapsTableRemoveRowCell eFapsTableCellClear")); cellRepeater.add(remove); i++; firstCell = true; } for (final IFilterable filterable : uirow.getCells()) { Component cell = null; boolean fixedWidth = false; if (filterable instanceof AbstractUIField) { fixedWidth = ((AbstractUIField) filterable).getFieldConfiguration().isFixedWidth(); cell = new FieldPanel(cellRepeater.newChildId(), Model.of((AbstractUIField) filterable)); } cell.setOutputMarkupId(true); if (fixedWidth) { if (firstCell) { firstCell = false; cell.add(AttributeModifier.append("class", "eFapsTableFirstCell eFapsTableCell" + " eFapsCellFixedWidth" + i)); } else { cell.add(AttributeModifier.append("class", "eFapsTableCell eFapsCellFixedWidth" + i)); } } else { if (firstCell) { firstCell = false; cell.add(AttributeModifier.append("class", "eFapsTableFirstCell eFapsTableCell" + " eFapsCellWidth" + i)); } else { cell.add(AttributeModifier.append("class", "eFapsTableCell eFapsCellWidth" + i)); } } if (cellRepeater.size() < 1) { cell.add(AttributeModifier.append("class", "eFapsTableCellClear")); } cellRepeater.add(cell); i++; } final RepeatingView hiddenRepeater = new RepeatingView("hiddenRepeater"); this.add(hiddenRepeater); for (final IHidden hidden : uirow.getHidden()) { if (!hidden.isAdded()) { hiddenRepeater.add(hidden.getComponent(hiddenRepeater.newChildId())); hidden.setAdded(true); } } this.add(new RowId("rowId", Model.of((AbstractInstanceObject) uirow))); }
From source file:org.efaps.ui.wicket.models.field.factories.NumberUIFactory.java
License:Apache License
@Override public Component getEditable(final String _wicketId, final AbstractUIField _uiField) throws EFapsException { Component ret = null; if (applies(_uiField)) { switch (_uiField.getFieldConfiguration().getUIType()) { case DEFAULT: case NUMBER: ret = new NumberField(_wicketId, Model.of(_uiField), _uiField.getFieldConfiguration()); break; case BUTTON: case CHECKBOX: case DROPDOWN: case RADIO: case SNIPPLET: ret = ((UITypeFactory) UITypeFactory.get()).getEditableComp(_wicketId, _uiField); ret.add(new FormNumberValidator(_uiField)); break; default:/*from w w w. j a v a2s . c o m*/ break; } } return ret; }
From source file:org.eknet.wicket.commons.yaml.SubcolumnDef.java
License:Apache License
public void setColumnContent(ComponentSupplier<?> supplier, ContentAlign align) { Component c = supplier.get("ccontent"); c.add(new AttributeModifier("class", align.getCssClass())); columnDef.addOrReplace(c);/*ww w . java 2s. c o m*/ }
From source file:org.geoserver.gwc.web.gridset.TileMatrixSetEditor.java
License:Open Source License
/** * @param id/* www.j a va 2 s.c o m*/ * @param model * the model over the appropriate list of {@link Grid} * @see WMSInfo#getAuthorityURLs() * @see LayerInfo#getAuthorityURLs() * @see LayerGroupInfo#getAuthorityURLs() */ public TileMatrixSetEditor(final String id, final IModel<GridSetInfo> info) { super(id, new PropertyModel<List<Grid>>(info, "levels")); add(new TileMatrixSetValidator()); final IModel<List<Grid>> list = getModel(); checkNotNull(list.getObject()); this.info = info; this.readOnly = info.getObject().isInternal(); // container for ajax updates final WebMarkupContainer container = new WebMarkupContainer("container"); container.setOutputMarkupId(true); add(container); final IModel<Boolean> preserveesolutionsModel = new PropertyModel<Boolean>(info, "resolutionsPreserved"); final RadioGroup<Boolean> resolutionsOrScales = new RadioGroup<Boolean>("useResolutionsOrScalesGroup", preserveesolutionsModel); container.add(resolutionsOrScales); Radio<Boolean> preserveResolutions = new Radio<Boolean>("preserveResolutions", new Model<Boolean>(Boolean.TRUE)); Radio<Boolean> preserveScales = new Radio<Boolean>("preserveScales", new Model<Boolean>(Boolean.FALSE)); resolutionsOrScales.add(preserveResolutions); resolutionsOrScales.add(preserveScales); // update the table when this option changes so either the resolutions or scales column is // enabled resolutionsOrScales.add(new AjaxFormChoiceComponentUpdatingBehavior() { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { resolutionsOrScales.processInput(); final boolean useResolutions = resolutionsOrScales.getModelObject().booleanValue(); Iterator<? extends ListItem<Grid>> iterator = grids.iterator(); while (iterator.hasNext()) { ListItem<Grid> next = iterator.next(); next.get("resolution").setEnabled(useResolutions); next.get("scale").setEnabled(!useResolutions); } target.addComponent(table); } }); // the link list table = new WebMarkupContainer("table"); table.setOutputMarkupId(true); table.add(thLabel("level")); table.add(thLabel("resolution")); table.add(thLabel("scale")); table.add(thLabel("name")); table.add(thLabel("tiles")); container.add(table); grids = new ListView<Grid>("gridLevels", new ArrayList<Grid>(list.getObject())) { private static final long serialVersionUID = 1L; @Override protected void onBeforeRender() { super.onBeforeRender(); } @Override protected void populateItem(final ListItem<Grid> item) { // odd/even style final int index = item.getIndex(); item.add(new SimpleAttributeModifier("class", index % 2 == 0 ? "even" : "odd")); item.add(new Label("zoomLevel", String.valueOf(index))); final TextField<Double> resolution; final TextField<Double> scale; final TextField<String> name; final Label tiles; final Component removeLink; resolution = new DecimalTextField("resolution", new PropertyModel<Double>(item.getModel(), "resolution")); resolution.setOutputMarkupId(true); item.add(resolution); scale = new DecimalTextField("scale", new PropertyModel<Double>(item.getModel(), "scaleDenom")); scale.setOutputMarkupId(true); item.add(scale); name = new TextField<String>("name", new PropertyModel<String>(item.getModel(), "name")); item.add(name); IModel<String> tilesModel = new IModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { // resolution.processInput(); Double res = resolution.getModelObject(); GridSetInfo gridSetInfo = TileMatrixSetEditor.this.info.getObject(); final ReferencedEnvelope extent = gridSetInfo.getBounds(); if (res == null || extent == null) { return "--"; } final int tileWidth = gridSetInfo.getTileWidth(); final int tileHeight = gridSetInfo.getTileHeight(); final double mapUnitWidth = tileWidth * res.doubleValue(); final double mapUnitHeight = tileHeight * res.doubleValue(); final long tilesWide = (long) Math .ceil((extent.getWidth() - mapUnitWidth * 0.01) / mapUnitWidth); final long tilesHigh = (long) Math .ceil((extent.getHeight() - mapUnitHeight * 0.01) / mapUnitHeight); NumberFormat nf = NumberFormat.getIntegerInstance();// so it shows grouping // for large numbers String tilesStr = nf.format(tilesWide) + " x " + nf.format(tilesHigh); return tilesStr; } @Override public void detach() { // } @Override public void setObject(String object) { // } }; tiles = new Label("tiles", tilesModel); tiles.setOutputMarkupId(true); item.add(tiles); // remove link if (TileMatrixSetEditor.this.readOnly) { removeLink = new Label("removeLink", ""); } else { removeLink = new ImageAjaxLink("removeLink", GWCIconFactory.DELETE_ICON) { private static final long serialVersionUID = 1L; @Override protected void onClick(AjaxRequestTarget target) { List<Grid> list = new ArrayList<Grid>(grids.getModelObject()); int index = ((Integer) getDefaultModelObject()).intValue(); list.remove(index); grids.setModelObject(list); target.addComponent(container); } }; removeLink.setDefaultModel(new Model<Integer>(Integer.valueOf(index))); removeLink.add(new AttributeModifier("title", true, new ResourceModel("TileMatrixSetEditor.removeLink"))); } item.add(removeLink); final boolean isResolutionsPreserved = preserveesolutionsModel.getObject(); resolution.setEnabled(isResolutionsPreserved); scale.setEnabled(!isResolutionsPreserved); resolution.add(new AjaxFormComponentUpdatingBehavior("onblur") { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { resolution.processInput(); Double res = resolution.getModelObject(); Double scaleDenominator = null; if (null != res) { GridSetInfo gridSetInfo = TileMatrixSetEditor.this.info.getObject(); Double metersPerUnit = gridSetInfo.getMetersPerUnit(); if (metersPerUnit != null) { scaleDenominator = res.doubleValue() * metersPerUnit.doubleValue() / GridSetFactory.DEFAULT_PIXEL_SIZE_METER; } } scale.setModelObject(scaleDenominator); target.addComponent(resolution); target.addComponent(scale); target.addComponent(tiles); } }); scale.add(new AjaxFormComponentUpdatingBehavior("onblur") { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { scale.processInput(); final Double scaleDenominator = scale.getModelObject(); Double res = null; if (null != scaleDenominator) { GridSetInfo gridSetInfo = TileMatrixSetEditor.this.info.getObject(); final double pixelSize = gridSetInfo.getPixelSize(); Double metersPerUnit = gridSetInfo.getMetersPerUnit(); if (metersPerUnit != null) { res = pixelSize * scaleDenominator / metersPerUnit; } } resolution.setModelObject(res); target.addComponent(resolution); target.addComponent(scale); target.addComponent(tiles); } }); } }; grids.setOutputMarkupId(true); // this is necessary to avoid loosing item contents on edit/validation checks grids.setReuseItems(true); table.add(grids); }
From source file:org.geoserver.gwc.web.layer.GridSubsetsEditor.java
License:Open Source License
public GridSubsetsEditor(final String id, final IModel<Set<XMLGridSubset>> model) { super(id, model); add(validator = new GridSubsetListValidator()); // container for ajax updates final WebMarkupContainer container = new WebMarkupContainer("container"); container.setOutputMarkupId(true);//from ww w.j ava2s . c om add(container); // the link list table = new WebMarkupContainer("table"); table.setOutputMarkupId(true); container.add(table); grids = new ListView<XMLGridSubset>("gridSubsets", new ArrayList<XMLGridSubset>(model.getObject())) { private static final long serialVersionUID = 1L; @Override protected void onBeforeRender() { super.onBeforeRender(); } @Override protected void populateItem(final ListItem<XMLGridSubset> item) { // odd/even style final int index = item.getIndex(); item.add(new SimpleAttributeModifier("class", index % 2 == 0 ? "even" : "odd")); final XMLGridSubset gridSubset = item.getModelObject(); GridSetBroker gridSetBroker = GWC.get().getGridSetBroker(); String gridsetDescription = null; int gridsetLevels; boolean gridsetExists; { final GridSet gridSet = gridSetBroker.get(gridSubset.getGridSetName()); gridsetExists = gridSet != null; if (gridsetExists) { gridsetLevels = gridSet.getNumLevels(); gridsetDescription = gridSet.getDescription(); } else { gridsetLevels = gridSubset.getZoomStop() == null ? 1 : gridSubset.getZoomStop().intValue(); } } final Label gridSetLabel; final Component gridSetBounds; gridSetLabel = new Label("gridSet", new PropertyModel<String>(item.getModel(), "gridSetName")); if (!gridsetExists) { gridSetLabel.add(new AttributeModifier("style", true, new Model<String>("color:red;text-decoration:line-through;"))); getPage().warn("GridSet " + gridSubset.getGridSetName() + " does not exist"); } item.add(gridSetLabel); if (null != gridsetDescription) { gridSetLabel.add(new AttributeModifier("title", true, new Model<String>(gridsetDescription))); } final Component removeLink; final int maxZoomLevel = gridsetLevels - 1; final ArrayList<Integer> zoomLevels = new ArrayList<Integer>(maxZoomLevel + 1); for (int z = 0; z <= maxZoomLevel; z++) { zoomLevels.add(Integer.valueOf(z)); } // zoomStart has all zoom levels as choices // zoomStop choices start at zoomStart's selection // minCachedLevel start at zoomStart's selection and ends at zoomStop's selection // maxCachedLevel start at minCachedLevels' and ends at zoomStop's selection final IModel<Integer> zoomStartModel; final IModel<Integer> zoomStopModel; final IModel<Integer> minCachedLevelModel; final IModel<Integer> maxCachedLevelModel; final ZoomLevelDropDownChoice zoomStart; final ZoomLevelDropDownChoice zoomStop; final ZoomLevelDropDownChoice minCachedLevel; final ZoomLevelDropDownChoice maxCachedLevel; zoomStartModel = new PropertyModel<Integer>(item.getModel(), "zoomStart"); zoomStopModel = new PropertyModel<Integer>(item.getModel(), "zoomStop"); minCachedLevelModel = new PropertyModel<Integer>(item.getModel(), "minCachedLevel"); maxCachedLevelModel = new PropertyModel<Integer>(item.getModel(), "maxCachedLevel"); @SuppressWarnings({ "rawtypes", "unchecked" }) final IModel<List<Integer>> allLevels = new Model(zoomLevels); zoomStart = new ZoomLevelDropDownChoice("zoomStart", zoomStartModel, allLevels); zoomStart.setEnabled(gridsetExists); item.add(zoomStart); zoomStop = new ZoomLevelDropDownChoice("zoomStop", zoomStopModel, allLevels); zoomStop.setEnabled(gridsetExists); item.add(zoomStop); minCachedLevel = new ZoomLevelDropDownChoice("minCachedLevel", minCachedLevelModel, allLevels); minCachedLevel.setEnabled(gridsetExists); item.add(minCachedLevel); maxCachedLevel = new ZoomLevelDropDownChoice("maxCachedLevel", maxCachedLevelModel, allLevels); maxCachedLevel.setEnabled(gridsetExists); item.add(maxCachedLevel); for (ZoomLevelDropDownChoice dropDown : Arrays.asList(zoomStart, zoomStop, minCachedLevel, maxCachedLevel)) { dropDown.add(new OnChangeAjaxBehavior() { private static final long serialVersionUID = 1L; // cascades to zoomStop, min and max cached levels @Override protected void onUpdate(AjaxRequestTarget target) { updateValidZoomRanges(zoomStart, zoomStop, minCachedLevel, maxCachedLevel, target); } }); } updateValidZoomRanges(zoomStart, zoomStop, minCachedLevel, maxCachedLevel, null); // gridSetBounds = new EnvelopePanel("bounds"); // gridSetBounds.setCRSFieldVisible(false); // gridSetBounds.setCrsRequired(false); // gridSetBounds.setLabelsVisibility(false); // gridSetBounds.setModel(new Model<ReferencedEnvelope>(new ReferencedEnvelope())); gridSetBounds = new Label("bounds", new ResourceModel("GridSubsetsEditor.bounds.dynamic")); item.add(gridSetBounds); removeLink = new ImageAjaxLink("removeLink", GWCIconFactory.DELETE_ICON) { private static final long serialVersionUID = 1L; @Override protected void onClick(AjaxRequestTarget target) { List<XMLGridSubset> list; list = new ArrayList<XMLGridSubset>(grids.getModelObject()); final XMLGridSubset subset = (XMLGridSubset) getDefaultModelObject(); list.remove(subset); grids.setModelObject(list); List<String> choices = new ArrayList<String>(availableGridSets.getChoices()); choices.add(subset.getGridSetName()); Collections.sort(choices); availableGridSets.setChoices(choices); target.addComponent(container); target.addComponent(availableGridSets); } }; removeLink.setDefaultModel(item.getModel()); removeLink.add( new AttributeModifier("title", true, new ResourceModel("GridSubsetsEditor.removeLink"))); item.add(removeLink); } }; grids.setOutputMarkupId(true); // this is necessary to avoid loosing item contents on edit/validation checks grids.setReuseItems(true); table.add(grids); List<String> gridSetNames = new ArrayList<String>(GWC.get().getGridSetBroker().getNames()); for (XMLGridSubset gs : model.getObject()) { gridSetNames.remove(gs.getGridSetName()); } Collections.sort(gridSetNames); GeoServerAjaxFormLink addGridsubsetLink = new GeoServerAjaxFormLink("addGridSubset") { private static final long serialVersionUID = 1L; @Override protected void onClick(AjaxRequestTarget target, Form form) { availableGridSets.processInput(); final String selectedGridset = availableGridSets.getModelObject(); if (null == selectedGridset) { return; } List<String> choices = new ArrayList<String>(availableGridSets.getChoices()); choices.remove(selectedGridset); availableGridSets.setChoices(choices); availableGridSets.setEnabled(!choices.isEmpty()); XMLGridSubset newSubset = new XMLGridSubset(); newSubset.setGridSetName(selectedGridset); grids.getModelObject().add(newSubset); target.addComponent(table); target.addComponent(availableGridSets); } }; addGridsubsetLink.add(new Icon("addIcon", GWCIconFactory.ADD_ICON)); add(addGridsubsetLink); availableGridSets = new DropDownChoice<String>("availableGridsets", new Model<String>(), gridSetNames); availableGridSets.setOutputMarkupId(true); add(availableGridSets); }
From source file:org.geoserver.importer.web.ImportTaskTable.java
License:Open Source License
@Override protected Component getComponentForProperty(String id, final IModel itemModel, Property property) { if (property == ImportTaskProvider.NAME) { return new LayerLinkPanel(id, itemModel); }// w w w . java 2 s .com if (property == ImportTaskProvider.STATUS) { ImportTask.State state = (ImportTask.State) property.getModel(itemModel).getObject(); Component c = null; if (state == ImportTask.State.ERROR) { c = new SimpleAjaxLink<ImportTask>(id, itemModel, new StatusDescriptionModel(property.getModel(itemModel))) { @Override protected void onClick(AjaxRequestTarget target) { popupWindow.setContent( new ExceptionPanel(popupWindow.getContentId(), getModelObject().getError())); popupWindow.show(target); } }; } else { c = new Label(id, new StatusDescriptionModel(property.getModel(itemModel))); } String cssClass = new StatusIconModel(property.getModel(itemModel)).getCssClass(); return c.add(new SimpleAttributeModifier("class", cssClass)); } if (property == ImportTaskProvider.ACTION) { ImportTask.State state = (ImportTask.State) property.getModel(itemModel).getObject(); switch (state) { case COMPLETE: //link to map preview return new LayerPreviewPanel(id, itemModel); case NO_CRS: //provide link to choose crs return new NoCRSPanel(id, itemModel); //return createFixCRSLink(id, itemModel); case READY: //return advanced option link //for now disable if this is not a vector layer ImportTask task = (ImportTask) itemModel.getObject(); if (task.getLayer() != null && task.getLayer().getResource() instanceof FeatureTypeInfo) { return new AdvancedOptionPanel(id, itemModel); } return new WebMarkupContainer(id); default: return new WebMarkupContainer(id); } } return null; }
From source file:org.geoserver.web.data.store.DefaultDataStoreEditPanel.java
License:Open Source License
/** * Creates a new parameters panel with a list of input fields matching the {@link Param}s for * the factory related to the {@code DataStoreInfo} that's the model of the provided {@code * Form}./*from w w w . j a v a2 s .co m*/ * * @param componentId * the id for this component instance * @param storeEditForm * the form being build by the calling class, whose model is the * {@link DataStoreInfo} being edited */ public DefaultDataStoreEditPanel(final String componentId, final Form storeEditForm) { super(componentId, storeEditForm); final IModel model = storeEditForm.getModel(); final DataStoreInfo info = (DataStoreInfo) model.getObject(); final Catalog catalog = getCatalog(); final ResourcePool resourcePool = catalog.getResourcePool(); DataAccessFactory dsFactory; try { dsFactory = resourcePool.getDataStoreFactory(info); } catch (IOException e) { throw new RuntimeException(e); } final Map<String, ParamInfo> paramsMetadata = new LinkedHashMap<String, ParamInfo>(); { final boolean isNew = null == info.getId(); final Param[] dsParams = dsFactory.getParametersInfo(); for (Param p : dsParams) { ParamInfo paramInfo = new ParamInfo(p); // hide the repository params, the resource pool will inject it transparently if (!Repository.class.equals(paramInfo.getBinding())) { paramsMetadata.put(p.key, paramInfo); if (isNew && !p.isDeprecated()) { applyParamDefault(paramInfo, info); } } } } final List<String> keys = new ArrayList<String>(paramsMetadata.keySet()); final IModel paramsModel = new PropertyModel(model, "connectionParameters"); ListView paramsList = new ListView("parameters", keys) { private static final long serialVersionUID = 1L; @Override protected void populateItem(ListItem item) { String paramName = item.getDefaultModelObjectAsString(); ParamInfo paramMetadata = paramsMetadata.get(paramName); Component inputComponent; inputComponent = getInputComponent("parameterPanel", paramsModel, paramMetadata); String description = paramMetadata.getTitle(); if (description != null) { inputComponent.add(new SimpleAttributeModifier("title", description)); } item.add(inputComponent); } }; // needed for form components not to loose state paramsList.setReuseItems(true); add(paramsList); }
From source file:org.geoserver.web.translator.view.TranslationEditPage.java
License:Open Source License
private Component changeUiLanguageChoice() { final IModel sessionModel = new Model(getSession()); final IModel uiLocaleModel = new PropertyModel(sessionModel, "locale"); IModel choices = new LocaleListDetachableModel(true, uiLocaleModel); final Component uiLanguageChoice = new LocaleDropDown("changeUiLanguage", uiLocaleModel, uiLocaleModel, choices);/*from w ww. j a va 2 s . co m*/ uiLanguageChoice.add(new AjaxFormSubmitBehavior(changeUILanguageForm, "onChange") { private static final long serialVersionUID = 1L; @Override protected void onSubmit(final AjaxRequestTarget target) { getGeoServerApplication().clearWicketCaches(); setResponsePage(TranslationEditPage.this); } @Override protected void onError(final AjaxRequestTarget target) { // } }); return uiLanguageChoice; }
From source file:org.hippoecm.frontend.plugins.gallery.columns.modify.MimeTypeAttributeModifier.java
License:Apache License
@Override public AttributeModifier getCellAttributeModifier(Node node) { return new CssClassAppender(new MimeTypeAttributeModel(new JcrNodeModel(node))) { @Override//from w ww . j a v a 2s .co m public void bind(Component hostComponent) { super.bind(hostComponent); hostComponent.add(new Behavior() { @Override public void renderHead(Component component, final IHeaderResponse response) { response.render(CssHeaderItem.forReference(CSS_RESOURCE_REFERENCE)); } }); } }; }
From source file:org.hippoecm.frontend.plugins.gallery.editor.ImageCropEditorDialog.java
License:Apache License
public ImageCropEditorDialog(IModel<Node> jcrImageNodeModel, GalleryProcessor galleryProcessor) { super(jcrImageNodeModel); setSize(DIALOG_SIZE);/*from w w w . j a v a2s. c o m*/ setTitleKey(DIALOG_TITLE); this.galleryProcessor = galleryProcessor; Node thumbnailImageNode = jcrImageNodeModel.getObject(); HiddenField<String> regionField = new HiddenField<>("region", new PropertyModel<>(this, "region")); regionField.setOutputMarkupId(true); add(regionField); Component originalImage, imgPreview; try { Node originalImageNode = thumbnailImageNode.getParent() .getNode(HippoGalleryNodeType.IMAGE_SET_ORIGINAL); originalImageDimension = new Dimension( (int) originalImageNode.getProperty(HippoGalleryNodeType.IMAGE_WIDTH).getLong(), (int) originalImageNode.getProperty(HippoGalleryNodeType.IMAGE_HEIGHT).getLong()); JcrNodeModel originalNodeModel = new JcrNodeModel(originalImageNode); originalImage = new JcrImage("image", new JcrResourceStream(originalNodeModel)); imgPreview = new JcrImage("imagepreview", new JcrResourceStream(originalNodeModel)); } catch (RepositoryException e) { log.error("Cannot retrieve original image", e); error(e); originalImage = new EmptyPanel("image"); imgPreview = new EmptyPanel("imagepreview"); } WebMarkupContainer imagePreviewContainer = new WebMarkupContainer("previewcontainer"); imagePreviewContainer.setOutputMarkupId(true); try { configuredDimension = galleryProcessor.getDesiredResourceDimension(thumbnailImageNode); thumbnailDimension = handleZeroValueInDimension(originalImageDimension, configuredDimension); final double previewCropFactor = determinePreviewScalingFactor(thumbnailDimension.getWidth(), thumbnailDimension.getHeight()); final double previewWidth = Math.floor(previewCropFactor * thumbnailDimension.getWidth()); final double previewHeight = Math.floor(previewCropFactor * thumbnailDimension.getHeight()); imagePreviewContainer .add(new AttributeAppender("style", Model.of("width:" + previewWidth + "px"), ";")); imagePreviewContainer .add(new AttributeAppender("style", Model.of("height:" + previewHeight + "px"), ";")); } catch (RepositoryException | GalleryException e) { log.error("Cannot retrieve thumbnail dimensions", e); error(e); } boolean isUpscalingEnabled = true; try { isUpscalingEnabled = galleryProcessor.isUpscalingEnabled(thumbnailImageNode); } catch (GalleryException | RepositoryException e) { log.error("Cannot retrieve Upscaling configuration option", e); error(e); } Label thumbnailSize = new Label("thumbnail-size", new StringResourceModel("thumbnail-size", this, null)); thumbnailSize.setOutputMarkupId(true); add(thumbnailSize); // cropSettings = new ImageCropSettings(regionField.getMarkupId(), imagePreviewContainer.getMarkupId(), originalImageDimension, configuredDimension, thumbnailDimension, isUpscalingEnabled, false, thumbnailSize.getMarkupId(true)); if (configuredDimension.width > originalImageDimension.width || configuredDimension.height > originalImageDimension.height) { final double cropFactor = determineScalingFactor(configuredDimension.getWidth(), configuredDimension.getHeight(), originalImageDimension.getWidth(), originalImageDimension.getHeight()); cropSettings.setInitialWidth((int) Math.floor(cropFactor * configuredDimension.getWidth())); cropSettings.setInitialHeight((int) Math.floor(cropFactor * configuredDimension.getHeight())); } final ImageCropBehavior imageCropBehavior = new ImageCropBehavior(cropSettings); final IModel<Boolean> fitViewModel = new PropertyModel<>(this.cropSettings, "fitView"); final AjaxCheckBox fitViewCheckbox = new AjaxCheckBox("fit-view", fitViewModel) { @Override protected void onUpdate(AjaxRequestTarget target) { executeFitInView(target, imageCropBehavior); } }; fitViewCheckbox.setOutputMarkupId(true); add(fitViewCheckbox); originalImage.add(imageCropBehavior); originalImage.setOutputMarkupId(true); add(originalImage); imgPreview.add(new AttributeAppender("style", Model.of("position:absolute"), ";")); imagePreviewContainer.add(imgPreview); imagePreviewContainer.setVisible(cropSettings.isPreviewVisible()); add(imagePreviewContainer); add(new Label("preview-description", cropSettings.isPreviewVisible() ? new StringResourceModel("preview-description-enabled", this, null) : new StringResourceModel("preview-description-disabled", this, null))); compressionQuality = 1.0f; try { compressionQuality = galleryProcessor.getScalingParametersMap().get(thumbnailImageNode.getName()) .getCompressionQuality(); } catch (RepositoryException e) { log.info("Cannot retrieve compression quality.", e); } }