/* Authors:
* Adam Young
*
* Copyright (C) 2010 Red Hat
* see file 'COPYING' for use and warranty information
*
* 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 only
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* REQUIRES: ipa.js */
/* CURRENTLY ALSO REQUIRES search.js, because it reuses it's code to create
* the AssociationList elements; IT NEEDS IT'S OWN CODE! */
function ipa_associator(spec) {
spec = spec || {};
var that = {};
that.entity_name = spec.entity_name;
that.pkey = spec.pkey;
that.other_entity = spec.other_entity;
that.values = spec.values;
that.method = spec.method;
that.on_success = spec.on_success;
that.on_error = spec.on_error;
that.execute = function() {
};
return that;
}
/**
*This associator is built for the case where each association requires a separate rpc
*/
function serial_associator(spec) {
spec = spec || {};
var that = ipa_associator(spec);
that.execute = function() {
if (!that.values || !that.values.length) {
that.on_success();
return;
}
var value = that.values.shift();
if (!value) {
that.on_success();
return;
}
var args = [value];
var options = {};
options[that.entity_name] = that.pkey;
ipa_cmd(
that.method,
args,
options,
that.execute,
that.on_error,
that.other_entity
);
};
return that;
}
/**
*This associator is for the common case where all the asociations can be sent
in a single rpc
*/
function bulk_associator(spec) {
spec = spec || {};
var that = ipa_associator(spec);
that.execute = function() {
if (!that.values || !that.values.length) {
that.on_success();
return;
}
var value = that.values.shift();
if (!value) {
that.on_success();
return;
}
while (that.values.length > 0) {
value += ',' + that.values.shift();
}
var args = [that.pkey];
var options = { 'all': true };
options[that.other_entity] = value;
ipa_cmd(
that.method,
args,
options,
that.on_success,
that.on_error,
that.entity_name
);
};
return that;
}
/**
* This dialog is used for adding associations between two entities.
*/
function ipa_association_adder_dialog(spec) {
spec = spec || {};
var that = ipa_adder_dialog(spec);
that.entity_name = spec.entity_name;
that.pkey = spec.pkey;
that.other_entity = spec.other_entity;
that.associator = spec.associator;
that.method = spec.method || 'add_member';
that.on_success = spec.on_success;
that.on_error = spec.on_error;
that.init = function() {
if (!that.columns.length) {
var pkey_name = IPA.metadata[that.other_entity].primary_key;
that.create_column({
name: pkey_name,
label: IPA.metadata[that.other_entity].label,
primary_key: true,
width: '200px'
});
}
that.adder_dialog_init();
};
that.search = function() {
function on_success(data, text_status, xhr) {
var results = data.result;
that.clear_available_values();
for (var i=0; i', {
'href': '#'+value,
'html': value,
'click': function (value) {
return function() {
var state = IPA.tab_state(that.other_entity);
state[that.other_entity + '-facet'] = 'details';
state[that.other_entity + '-pkey'] = value;
$.bbq.pushState(state);
return false;
}
}(value)
}).appendTo(container);
};
}
that.table_create(container);
var action_panel = that.facet.get_action_panel();
var li = $('.action-controls', action_panel);
// creating generic buttons for layout
$('', {
'type': 'button',
'name': 'remove',
'value': IPA.messages.button.remove
}).appendTo(li);
$('', {
'type': 'button',
'name': 'add',
'value': IPA.messages.button.enroll
}).appendTo(li);
};
that.setup = function(container) {
that.table_setup(container);
// replacing generic buttons with ipa_button and setting click handler
var action_panel = that.facet.get_action_panel();
var button = $('input[name=remove]', action_panel);
button.replaceWith(ipa_button({
'label': button.val(),
'icon': 'ui-icon-trash',
'click': function() { that.remove(); }
}));
button = $('input[name=add]', action_panel);
button.replaceWith(ipa_button({
'label': button.val(),
'icon': 'ui-icon-plus',
'click': function() { that.add() }
}));
};
that.get_records = function(pkeys, on_success, on_error) {
var batch = ipa_batch_command({
'name': that.entity_name+'_'+that.name,
'on_success': on_success,
'on_error': on_error
});
for (var i=0; iError: '+error_thrown.name+'