///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.plugins.licensemanagement; import java.util.Collection; import java.util.Date; import java.util.List; import org.apache.log4j.Logger; import org.apache.wicket.model.PropertyModel; import org.projectforge.user.PFUserDO; import org.projectforge.user.UserRights; import org.projectforge.web.common.MultiChoiceListHelper; import org.projectforge.web.user.UsersComparator; import org.projectforge.web.user.UsersProvider; import org.projectforge.web.wicket.AbstractEditForm; import org.projectforge.web.wicket.WicketUtils; import org.projectforge.web.wicket.autocompletion.PFAutoCompleteMaxLengthTextField; import org.projectforge.web.wicket.bootstrap.GridSize; import org.projectforge.web.wicket.components.DatePanel; import org.projectforge.web.wicket.components.DatePanelSettings; import org.projectforge.web.wicket.components.MaxLengthTextArea; import org.projectforge.web.wicket.components.MaxLengthTextField; import org.projectforge.web.wicket.components.MinMaxNumberField; import org.projectforge.web.wicket.components.RequiredMaxLengthTextField; import org.projectforge.web.wicket.flowlayout.DivTextPanel; import org.projectforge.web.wicket.flowlayout.FieldsetPanel; import org.projectforge.web.wicket.flowlayout.FileUploadPanel; import org.projectforge.web.wicket.flowlayout.IconButtonPanel; import org.projectforge.web.wicket.flowlayout.IconType; import org.projectforge.web.wicket.flowlayout.InputPanel; import com.vaynberg.wicket.select2.Select2MultiChoice; /** * This is the edit formular page. * @author Kai Reinhard (k.reinhard@micromata.de) * */ public class LicenseEditForm extends AbstractEditForm<LicenseDO, LicenseEditPage> { private static final long serialVersionUID = -6208809585214296635L; private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LicenseEditForm.class); MultiChoiceListHelper<PFUserDO> assignOwnersListHelper; protected FileUploadPanel fileUploadPanel1, fileUploadPanel2; public LicenseEditForm(final LicenseEditPage parentPage, final LicenseDO data) { super(parentPage, data); setMultiPart(true); } @SuppressWarnings("serial") @Override protected void init() { super.init(); { // Organization final FieldsetPanel fs = gridBuilder.newFieldset(getString("organization")); final PFAutoCompleteMaxLengthTextField organizationField = new PFAutoCompleteMaxLengthTextField(InputPanel.WICKET_ID, new PropertyModel<String>(data, "organization")) { @Override protected List<String> getChoices(final String input) { return getBaseDao().getAutocompletion("organization", input); } }; organizationField.withMatchContains(true).withMinChars(2).withFocus(true); WicketUtils.setStrong(organizationField); fs.add(organizationField); } { // Product final FieldsetPanel fs = gridBuilder.newFieldset(getString("plugins.licensemanagement.product")); final PFAutoCompleteMaxLengthTextField productField = new PFAutoCompleteMaxLengthTextField(InputPanel.WICKET_ID, new PropertyModel<String>(data, "product")) { @Override protected List<String> getChoices(final String input) { return getBaseDao().getAutocompletion("product", input); } }; productField.withMatchContains(true).withMinChars(2); productField.setRequired(true); WicketUtils.setStrong(productField); fs.add(productField); } { // Version final FieldsetPanel fs = gridBuilder.newFieldset(getString("plugins.licensemanagement.version")); final RequiredMaxLengthTextField versionField = new RequiredMaxLengthTextField(fs.getTextFieldId(), new PropertyModel<String>(data, "version")); WicketUtils.setStrong(versionField); fs.add(versionField); } { // UpdateFromVersion final FieldsetPanel fs = gridBuilder.newFieldset(getString("plugins.licensemanagement.updateFromVersion")); fs.add(new MaxLengthTextField(fs.getTextFieldId(), new PropertyModel<String>(data, "updateFromVersion"))); fs.addHelpIcon(getString("plugins.licensemanagement.updateFromVersion.tooltip")); } { // Device final FieldsetPanel fs = gridBuilder.newFieldset(getString("plugins.licensemanagement.device")); fs.add(new MaxLengthTextField(fs.getTextFieldId(), new PropertyModel<String>(data, "device"))); fs.addHelpIcon(getString("plugins.licensemanagement.device.tooltip")); } { // Number of license: final FieldsetPanel fs = gridBuilder.newFieldset(getString("plugins.licensemanagement.numberOfLicenses")); final MinMaxNumberField<Integer> maxNumberField = new MinMaxNumberField<Integer>(InputPanel.WICKET_ID, new PropertyModel<Integer>( data, "numberOfLicenses"), 0, 999999); WicketUtils.setSize(maxNumberField, 6); fs.add(maxNumberField); } { // Owners final FieldsetPanel fs = gridBuilder.newFieldset(getString("plugins.licensemanagement.owner")).setLabelSide(false); final UsersProvider usersProvider = new UsersProvider(); assignOwnersListHelper = new MultiChoiceListHelper<PFUserDO>().setComparator(new UsersComparator()).setFullList( usersProvider.getSortedUsers()); final Collection<PFUserDO> owners = ((LicenseDao) getBaseDao()).getSortedOwners(data); if (owners != null) { for (final PFUserDO owner : owners) { assignOwnersListHelper.addOriginalAssignedItem(owner).assignItem(owner); } } final Select2MultiChoice<PFUserDO> ownersChoice = new Select2MultiChoice<PFUserDO>(fs.getSelect2MultiChoiceId(), new PropertyModel<Collection<PFUserDO>>(this.assignOwnersListHelper, "assignedItems"), usersProvider); fs.add(ownersChoice); } gridBuilder.newSplitPanel(GridSize.COL50); { // Valid since final FieldsetPanel fs = gridBuilder.newFieldset(getString("plugins.licensemanagement.validSince")); final DatePanel validSinceDatePanel = new DatePanel(fs.newChildId(), new PropertyModel<Date>(data, "validSince"), DatePanelSettings .get().withTargetType(java.sql.Date.class).withSelectProperty("validSince")); fs.add(validSinceDatePanel); } gridBuilder.newSplitPanel(GridSize.COL33); { // Valid until final FieldsetPanel fs = gridBuilder.newFieldset(getString("plugins.licensemanagement.validUntil")); final DatePanel validUntilDatePanel = new DatePanel(fs.newChildId(), new PropertyModel<Date>(data, "validUntil"), DatePanelSettings .get().withTargetType(java.sql.Date.class).withSelectProperty("validUntil")); fs.add(validUntilDatePanel); } gridBuilder.newGridPanel(); { // License holder final FieldsetPanel fs = gridBuilder.newFieldset(getString("plugins.licensemanagement.licenseHolder")); fs.add(new MaxLengthTextField(fs.getTextFieldId(), new PropertyModel<String>(data, "licenseHolder"))); } final LicenseManagementRight right = (LicenseManagementRight) UserRights.instance().getRight(LicenseDao.USER_RIGHT_ID); { // Text key final FieldsetPanel fs = gridBuilder.newFieldset(getString("plugins.licensemanagement.key")); if (right.isLicenseKeyVisible(getUser(), data) == true) { fs.add(new MaxLengthTextArea(fs.getTextAreaId(), new PropertyModel<String>(data, "key"))).setAutogrow(); } else { fs.add(new DivTextPanel(fs.newChildId(), getString("plugins.licensemanagement.key.notvisible"))); fs.addHelpIcon(getString("plugins.licensemanagement.key.notvisible.tooltip")); } } if ((isNew() == true && right.hasInsertAccess(getUser()) == true) // || (right.hasUpdateAccess(getUser(), data, null) == true && right.isLicenseKeyVisible(getUser(), data) == true)) { gridBuilder.newSplitPanel(GridSize.COL50); FieldsetPanel fs = gridBuilder.newFieldset(gridBuilder.getString("plugins.licensemanagement.file1")); fileUploadPanel1 = new FileUploadPanel(fs.newChildId(), fs, this, true, new PropertyModel<String>(data, "filename1"), new PropertyModel<byte[]>(data, "file1")); if (isNew() == false && (data.getFile1() != null || data.getFile2() != null)) { // Swap files: fs.add(new IconButtonPanel(fs.newChildId(), IconType.SWAP, getString("plugins.licensemanagement.swapFiles")) { /** * @see org.projectforge.web.wicket.flowlayout.IconButtonPanel#onSubmit() */ @Override protected void onSubmit() { final byte[] swap = data.getFile1(); final String swapFilename = data.getFilename1(); data.setFile1(data.getFile2()); data.setFilename1(data.getFilename2()); data.setFile2(swap); data.setFilename2(swapFilename); } }); } gridBuilder.newSplitPanel(GridSize.COL50); fs = gridBuilder.newFieldset(gridBuilder.getString("plugins.licensemanagement.file2")); fileUploadPanel2 = new FileUploadPanel(fs.newChildId(), fs, this, true, new PropertyModel<String>(data, "filename2"), new PropertyModel<byte[]>(data, "file2")); gridBuilder.newGridPanel(); } else if (right.isLicenseKeyVisible(getUser(), data) == true) { } { // Text comment final FieldsetPanel fs = gridBuilder.newFieldset(getString("comment")); fs.add(new MaxLengthTextArea(fs.getTextAreaId(), new PropertyModel<String>(data, "comment"))).setAutogrow(); } addCloneButton(); } @Override protected Logger getLogger() { return log; } }