com.tasktop.c2c.server.scm.web.ui.client.view.DiffEntryView.java Source code

Java tutorial

Introduction

Here is the source code for com.tasktop.c2c.server.scm.web.ui.client.view.DiffEntryView.java

Source

/*******************************************************************************
 * Copyright (c) 2010, 2012 Tasktop Technologies
 * 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     Tasktop Technologies - initial API and implementation
 ******************************************************************************/
package com.tasktop.c2c.server.scm.web.ui.client.view;

import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.tasktop.c2c.server.scm.domain.Commit;
import com.tasktop.c2c.server.scm.domain.DiffEntry;
import com.tasktop.c2c.server.scm.web.ui.client.resources.ScmMessages;
import com.tasktop.c2c.server.scm.web.ui.client.resources.ScmResources;

/**
 * @author cmorgan (Tasktop Technologies Inc.)
 * 
 */
public class DiffEntryView extends Composite implements Editor<Commit> {

    interface Binder extends UiBinder<Widget, DiffEntryView> {
    }

    private static Binder uiBinder = GWT.create(Binder.class);

    @UiField
    protected Image operationImage;
    @UiField
    protected Label renameFrom;
    @UiField
    protected Anchor fileName;

    @UiField
    protected Label numAdded;
    @UiField
    protected Label numRemoved;

    private int maxFileNameSize = 115;
    private int fileNamePartSize = (maxFileNameSize / 2) - 2;
    private ScmMessages scmMessages = GWT.create(ScmMessages.class);

    public DiffEntryView(DiffEntry diff) {
        initWidget(uiBinder.createAndBindUi(this));
        renderDiff(diff);
    }

    /**
     * @param diff
     */
    private void renderDiff(DiffEntry diff) {
        ImageResource opRes;
        String filename = null;
        renameFrom.setVisible(false);
        switch (diff.getChangeType()) {
        case MODIFY:
            opRes = ScmResources.get.changeIcon();
            filename = diff.getNewPath();
            break;
        case DELETE:
            opRes = ScmResources.get.deleteIcon();
            filename = diff.getOldPath();
            break;
        case RENAME:
            renameFrom.setVisible(true);
            renameFrom.setText(scmMessages.renamedTo(trimFilename(diff.getOldPath()), ""));
            opRes = ScmResources.get.changeIcon();
            filename = diff.getNewPath();
            break;
        case COPY:
            renameFrom.setVisible(true);
            renameFrom.setText(scmMessages.copiedTo(trimFilename(diff.getOldPath()), ""));
            opRes = ScmResources.get.changeIcon();
            filename = diff.getNewPath();
            break;
        default:
        case ADD:
            opRes = ScmResources.get.addIcon();
            filename = diff.getNewPath();
            break;
        }
        operationImage.setResource(opRes);
        fileName.setText(trimFilename(filename));

        if (diff.getLinesAdded() == 0) {
            numAdded.setVisible(false);
        } else {
            numAdded.setText("+" + diff.getLinesAdded());
        }

        if (diff.getLinesRemoved() == 0) {

        } else {
            numRemoved.setText("-" + diff.getLinesRemoved());
        }

    }

    private String trimFilename(String theFilename) {
        if (theFilename.length() > maxFileNameSize) {
            int start = theFilename.length() - fileNamePartSize;
            return theFilename.substring(0, fileNamePartSize) + "..." + theFilename.substring(start);
        }
        return theFilename;
    }

    public Anchor getFileNameAnchor() {
        return fileName;
    }
}