/* * RHQ Management Platform * Copyright (C) 2005-2014 Red Hat, Inc. * All rights reserved. * * This program 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 2 of the License. * * This program 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, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.coregui.client.drift; import java.util.ArrayList; import java.util.Collection; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.Record; import com.smartgwt.client.rpc.RPCResponse; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; import org.rhq.core.domain.criteria.DriftDefinitionTemplateCriteria; import org.rhq.core.domain.criteria.GenericDriftChangeSetCriteria; import org.rhq.core.domain.drift.DriftDefinitionTemplate; import org.rhq.core.domain.drift.DriftSnapshot; import org.rhq.core.domain.drift.DriftSnapshot.DriftSnapshotDirectory; import org.rhq.core.domain.drift.DriftSnapshotRequest; import org.rhq.core.domain.util.PageList; import org.rhq.coregui.client.CoreGUI; import org.rhq.coregui.client.gwt.DriftGWTServiceAsync; import org.rhq.coregui.client.gwt.GWTServiceLookup; import org.rhq.coregui.client.util.RPCDataSource; /** * @author jshaughnessy * */ public class DriftSnapshotDataSource extends RPCDataSource<DriftSnapshotDirectory, GenericDriftChangeSetCriteria> { public static final String ATTR_FILES = "files"; public static final String ATTR_ADDED = "added"; public static final String ATTR_CHANGED = "changed"; public static final String ATTR_REMOVED = "removed"; public static final String ATTR_DEF_ID = "defId"; public static final String ATTR_DIR_PATH = "dirPath"; private Integer templateId; private Integer driftDefId; private Integer version; private String templateChangeSetId; public DriftSnapshotDataSource(int templateId) { this(templateId, null, null); } public DriftSnapshotDataSource(int driftDefId, int version) { this(null, driftDefId, version); } private DriftSnapshotDataSource(Integer templateId, Integer driftDefId, Integer version) { this.templateId = templateId; this.driftDefId = driftDefId; this.version = version; this.setCacheAllData(true); } protected int getDriftDefId() { return driftDefId; } protected int getVersion() { return version; } @Override public DriftSnapshotDirectory copyValues(Record from) { return null; } @Override public ListGridRecord copyValues(DriftSnapshotDirectory from) { ListGridRecord record = new ListGridRecord(); String dirPath = from.getDirectoryPath(); record.setAttribute(ATTR_DIR_PATH, (null == dirPath || "".equals(dirPath.trim())) ? "./" : dirPath); record.setAttribute(ATTR_FILES, from.getFiles()); record.setAttribute(ATTR_ADDED, from.getAdded()); record.setAttribute(ATTR_CHANGED, from.getChanged()); record.setAttribute(ATTR_REMOVED, from.getRemoved()); return record; } @Override protected void executeFetch(final DSRequest request, final DSResponse response, GenericDriftChangeSetCriteria criteria) { if (null == this.templateId) { DriftSnapshotRequest snapshotRequest = new DriftSnapshotRequest(driftDefId, version, null, null, true, false); executeGetSnapshot(request, response, snapshotRequest); } else { if (null == this.templateChangeSetId) { DriftDefinitionTemplateCriteria templateCriteria = new DriftDefinitionTemplateCriteria(); templateCriteria.addFilterId(this.templateId); GWTServiceLookup.getDriftService().findDriftDefinitionTemplatesByCriteria(templateCriteria, new AsyncCallback<PageList<DriftDefinitionTemplate>>() { public void onSuccess(final PageList<DriftDefinitionTemplate> result) { templateChangeSetId = String.valueOf(result.get(0).getChangeSetId()); DriftSnapshotRequest snapshotRequest = new DriftSnapshotRequest(templateChangeSetId, null, true, false); executeGetSnapshot(request, response, snapshotRequest); } public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError("Failed to load definition.", caught); } }); } else { DriftSnapshotRequest snapshotRequest = new DriftSnapshotRequest(templateChangeSetId, null, true, false); executeGetSnapshot(request, response, snapshotRequest); } } } private void executeGetSnapshot(final DSRequest request, final DSResponse response, DriftSnapshotRequest snapshotRequest) { DriftGWTServiceAsync driftService = GWTServiceLookup.getDriftService(); driftService.getSnapshot(snapshotRequest, new AsyncCallback<DriftSnapshot>() { public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(MSG.view_drift_failure_load(), caught); response.setStatus(RPCResponse.STATUS_FAILURE); processResponse(request.getRequestId(), response); } public void onSuccess(DriftSnapshot result) { Collection<DriftSnapshotDirectory> dirs = result.getDriftDirectories(); ListGridRecord[] records = buildRecords(dirs); for (Record record : records) { record.setAttribute(ATTR_DEF_ID, result.getRequest().getDriftDefinitionId()); } response.setData(records); response.setTotalRows(dirs.size()); processResponse(request.getRequestId(), response); } }); } @Override protected GenericDriftChangeSetCriteria getFetchCriteria(DSRequest request) { return null; } public ArrayList<ListGridField> getListGridFields() { ArrayList<ListGridField> fields = new ArrayList<ListGridField>(7); ListGridField dirPathField = new ListGridField(ATTR_DIR_PATH, "Directory"); fields.add(dirPathField); ListGridField filesField = new ListGridField(ATTR_FILES, "Files"); fields.add(filesField); ListGridField addedField = new ListGridField(ATTR_ADDED, "Added"); fields.add(addedField); ListGridField changedField = new ListGridField(ATTR_CHANGED, "Changed"); fields.add(changedField); ListGridField removedField = new ListGridField(ATTR_REMOVED, "Removed"); fields.add(removedField); dirPathField.setWidth("*"); filesField.setWidth("10%"); addedField.setWidth("10%"); changedField.setWidth("10%"); removedField.setWidth("10%"); return fields; } }