public void save()
    {
        //W klasie docelowej należy sprawdzić, czy row.isEmpty()
        //jeśli tak, to należy nadać nazwę tabeli, do ktrej zostanie wstawiony wiersz
        //należy to zrobić za pomocą row.setTableName(<nazwa>);
        //Dopiero potem należy wywołać save z klasy bazowej
        if(row.isEmpty())
        {
            row.addAttribute("name", name);
            row.addAttribute("description", description);
            for(Parameter p : parameters)
            {
                row.addAttribute(p.getName(), p.getValue());
            }
            for(AbstractAttribute a : attributes)
            {
                row.addAttribute(a.getType(), a.getName());
            }
            DataVector.getInstance().dbManager.insert(row);
        } else {
            row.update("description", description);
            DataRow param = new DataRow(row.getName());
            param.setTableName(row.getTableName());
            param.addAttribute("userName", DataVector.getInstance().dbManager.getUserName());
            List<DataRow> res = DataVector.getInstance().dbManager.select(param);
            if(!res.isEmpty())
            {
                DataVector.getInstance().dbManager.update(param, row);
            } else {
                DataVector.getInstance().dbManager.insert(row);
            }
        }
    }