/** * * Copyright * 2009-2015 Jayway Products AB * 2016-2017 Föreningen Sambruk * * Licensed under AGPL, Version 3.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/agpl.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package se.streamsource.streamflow.client.ui; import java.awt.Dimension; import javax.swing.ActionMap; import javax.swing.JScrollPane; import javax.swing.JToolBar; import javax.swing.table.DefaultTableModel; import org.jdesktop.application.Action; import org.jdesktop.application.Application; import org.jdesktop.application.FrameView; import org.jdesktop.swingx.JXFrame; import org.jdesktop.swingx.JXTable; import org.qi4j.api.injection.scope.Service; import se.streamsource.streamflow.infrastructure.event.domain.DomainEvent; import se.streamsource.streamflow.infrastructure.event.domain.TransactionDomainEvents; import se.streamsource.streamflow.infrastructure.event.domain.source.TransactionListener; import se.streamsource.streamflow.infrastructure.event.domain.source.helper.Events; /** * JAVADOC */ public class DebugWindow extends FrameView { public EventTable eventTable; public DebugWindow( @Service Application application) { super( application ); eventTable = new EventTable( ); eventTable.setEditable( false ); JXFrame frame = new JXFrame( "Streamflow Debug" ); frame.getContentPane().add( new JScrollPane( eventTable ) ); setFrame( frame ); JToolBar toolbar = new JToolBar(); ActionMap am = application.getContext().getActionMap( this ); toolbar.add( am.get( "clear" ) ); setToolBar( toolbar ); frame.setPreferredSize( new Dimension( 600, 300 ) ); frame.pack(); } @Action public void clear() { eventTable.clear(); } public static class EventTable extends JXTable implements TransactionListener { private DefaultTableModel eventModel; public EventTable( ) { eventModel = new DefaultTableModel( new String[]{"Usecase", "Event", "Entity", "Parameters"}, 0 ); setModel(eventModel); } public void notifyTransactions( Iterable<TransactionDomainEvents> transactions ) { for( DomainEvent event : Events.events( transactions )) { eventModel.addRow( new String[]{event.usecase().get(), event.name().get(), event.entity().get(), event.parameters().get()} ); if (eventModel.getRowCount() > 100) eventModel.removeRow( 0 ); } } public void clear() { int count = eventModel.getRowCount(); for (int i = 0; i < count; i++) eventModel.removeRow( 0 ); } } }