Dialogdesign med Java Swing – del 5

För att kunna utveckla dialogkoden fristående från den applikation i vilket den ska användas (vilket i sig är lämpligt för att den ska bli så återanvändbar som möjligt) så behöver vår dialogmodell förses med data genom instanser av ett interface, låt oss kalla dem dataproviders.

Det låter oss skriva mockupkod som ger oss dummydata här och nu och låter de olika projekt i vilken vår grafiska komponent ska användas skriva sina egna applikationsspecifika implementationer. Därmed kan vi även skriva tester för vår kod, utan att vi ens vet vilka våra framtida datakällor kommer att vara.

DbProviders

package com.golcher.tidsintervall.dbproviders;

import com.golcher.tidsintervall.komponenter.data.TidsintervallVo;
import java.util.ArrayList;

public interface ITidsIntervallDbProvider
{
    ArrayList<TidsintervallVo> hamtaData();
}

Mockup-kod för generering av dummy-data

package com.golcher.tidsintervall.dbproviders;

import com.golcher.tidsintervall.komponenter.data.KomponentFilter;
import com.golcher.tidsintervall.komponenter.data.TidsintervallKalla;
import com.golcher.tidsintervall.komponenter.data.TidsintervallVo;

import java.util.ArrayList;

public class MockupProvider implements ITidsIntervallDbProvider
{
    private final ArrayList<TidsintervallVo> _fejkadData;

    public MockupProvider(KomponentFilter fejkaDatakallaFor)
    {
        _fejkadData = new ArrayList<>();
        switch (fejkaDatakallaFor)
        {
            case Standard: fejkaStandard(); break;
            case Egen: fejkaEgen(); break;
            case Valda: fejkaValda(); break;
        }
    }

    private void fejkaValda()
    {
        _fejkadData.add(new TidsintervallVo("1", TidsintervallKalla.Standard, "08:00", "12:00", "Förmiddag"));
        _fejkadData.add(new TidsintervallVo("3", TidsintervallKalla.Egen, "13:00", "15:00", ""));
    }

    private void fejkaEgen()
    {
        _fejkadData.add(new TidsintervallVo("1", TidsintervallKalla.Egen, "08:00", "10:00", ""));
        _fejkadData.add(new TidsintervallVo("2", TidsintervallKalla.Egen, "10:00", "12:00", ""));
        _fejkadData.add(new TidsintervallVo("3", TidsintervallKalla.Egen, "13:00", "15:00", ""));
    }

    private void fejkaStandard()
    {
        _fejkadData.add(new TidsintervallVo("1", TidsintervallKalla.Standard, "08:00", "12:00", "Förmiddag"));
        _fejkadData.add(new TidsintervallVo("2", TidsintervallKalla.Standard, "13:00", "17:00", "Eftermiddag"));
        _fejkadData.add(new TidsintervallVo("3", TidsintervallKalla.Standard, "18:00", "22:00", "Kväll"));
        _fejkadData.add(new TidsintervallVo("4", TidsintervallKalla.Standard, "08:00", "22:00", "Heldag"));
    }

    @Override
    public ArrayList<TidsintervallVo> hamtaData()
    {
        return _fejkadData;
    }
}

Nu kan vi äntligen sätta ihop alla delar till en dialogmodell – men det får bli i nästa avsnitt!