return HttpResponse(simplejson.dumps(data), status=201, mimetype='application/json; charset=UTF-8') elif install_dep and resource.resource_type() == 'mashup': resources = [json.loads(resource.json_description)] workspace_info = json.loads(resource.json_description) for tab_entry in workspace_info['tabs']: for resource in tab_entry['resources']: widget = get_or_add_widget_from_catalogue(resource.get('vendor'), resource.get('name'), resource.get('version'), request.user) widget_data = get_widget_data(widget, request) widget_data['type'] = 'widget' resources.append(widget_data) for id_, op in workspace_info['wiring']['operators'].iteritems(): op_id_args = op['name'].split('/') op_id_args.append(request.user) operator = get_or_add_resource_from_available_marketplaces(*op_id_args) resources.append(json.loads(operator.json_description)) return HttpResponse(simplejson.dumps(resources), status=201, mimetype='application/json; charset=UTF-8') elif install_dep: return HttpResponse('[' + resource.json_description + ']', status=201, mimetype='application/json; charset=UTF-8') else: return HttpResponse(resource.json_description, status=201, mimetype='application/json; charset=UTF-8') class ResourceEntry(Resource): @authentication_required def read(self, request, vendor, name, version):
def fillWorkspaceUsingTemplate(workspace, template): if not isinstance(template, TemplateParser): template = TemplateParser(template) if template.get_resource_type() != 'mashup': raise Exception() user = workspace.creator user_workspace = UserWorkspace.objects.get(user=workspace.creator, workspace=workspace) context_values = get_context_values(user_workspace) processor = TemplateValueProcessor({'user': user, 'context': context_values}) workspace_info = template.get_resource_info() new_values = {} iwidget_id_mapping = {} for preference_name in workspace_info['preferences']: new_values[preference_name] = { 'inherit': False, 'value': workspace_info['preferences'][preference_name], } if len(new_values) > 0: update_workspace_preferences(workspace, new_values) new_forced_values = { 'extra_prefs': {}, 'iwidget': {}, } for param_name in workspace_info['params']: param = workspace_info['params'][param_name] new_forced_values['extra_prefs'][param_name] = { 'inheritable': False, 'label': param.get('label'), 'type': param.get('type'), } for tab_entry in workspace_info['tabs']: tab = createTab(tab_entry.get('name'), workspace, allow_renaming=True) new_values = {} for preference_name in tab_entry['preferences']: new_values[preference_name] = { 'inherit': False, 'value': tab_entry['preferences'][preference_name], } if len(new_values) > 0: update_tab_preferences(tab, new_values) for resource in tab_entry['resources']: position = resource['position'] rendering = resource['rendering'] initial_variable_values = {} iwidget_forced_values = {} for prop_name in resource['properties']: prop = resource['properties'][prop_name] read_only = prop.get('readonly') if read_only: iwidget_forced_values[prop_name] = {'value': prop.get('value')} else: initial_variable_values[prop_name] = processor.process(prop.get('value')) for pref_name in resource['preferences']: pref = resource['preferences'][pref_name] read_only = pref.get('readonly') if read_only: iwidget_forced_values[pref_name] = {'value': pref.get('value'), 'hidden': pref.get('hidden', False)} else: initial_variable_values[pref_name] = processor.process(pref.get('value')) widget = get_or_add_widget_from_catalogue(resource.get('vendor'), resource.get('name'), resource.get('version'), user, None) iwidget_data = { "left": int(position.get('x')), "top": int(position.get('y')), "icon_left": -1, "icon_top": -1, "zIndex": int(position.get('z')), "width": int(rendering.get('width')), "height": int(rendering.get('height')), "name": resource.get('title'), "layout": int(rendering.get('layout')), "widget": widget.uri, } iwidget = SaveIWidget(iwidget_data, user, tab, initial_variable_values) if resource.get('readonly'): iwidget.readOnly = True iwidget.save() new_forced_values['iwidget'][str(iwidget.id)] = iwidget_forced_values iwidget_id_mapping[resource.get('id')] = iwidget if workspace.forcedValues is not None and workspace.forcedValues != '': forced_values = json.loads(workspace.forcedValues) else: forced_values = { 'extra_prefs': {}, 'iwidget': {}, } forced_values['extra_prefs'].update(new_forced_values['extra_prefs']) forced_values['iwidget'].update(new_forced_values['iwidget']) workspace.forcedValues = json.dumps(forced_values, ensure_ascii=False) # wiring wiring_status = { 'operators': {}, 'connections': [], } if workspace.wiringStatus != '': workspace_wiring_status = json.loads(workspace.wiringStatus) else: workspace_wiring_status = { 'operators': {}, 'connections': [], 'views': [] } if 'views' not in workspace_wiring_status: workspace_wiring_status['views'] = [] max_id = 0 operators = {} for id_ in workspace_wiring_status['operators'].keys(): if int(id_) > max_id: max_id = int(id_) # Change string ids by integer ids and install unavailable operators for id_, op in workspace_info['wiring']['operators'].iteritems(): max_id += 1 #mapping between string ids and integer id operators[id_] = max_id wiring_status['operators'][max_id] = { 'id': max_id, 'name': op['name'] } op_id_args = op['name'].split('/') op_id_args.append(user) get_or_add_resource_from_available_marketplaces(*op_id_args) wiring_status['operators'].update(workspace_wiring_status['operators']) if workspace_wiring_status['connections']: wiring_status['connections'] = workspace_wiring_status['connections'] for connection in workspace_info['wiring']['connections']: source_id = connection['source']['id'] target_id = connection['target']['id'] if connection['source']['type'] == 'iwidget': source_id = iwidget_id_mapping[source_id].id elif connection['source']['type'] == 'ioperator': source_id = operators[source_id] if connection['target']['type'] == 'iwidget': target_id = iwidget_id_mapping[target_id].id elif connection['target']['type'] == 'ioperator': target_id = operators[target_id] wiring_status['connections'].append({ 'readOnly': connection['readonly'], 'source': { 'id': source_id, 'type': connection['source']['type'], 'endpoint': connection['source']['endpoint'], }, 'target': { 'id': target_id, 'type': connection['target']['type'], 'endpoint': connection['target']['endpoint'], }, }) wiring_status['views'] = workspace_wiring_status['views'] if 'views' in workspace_info['wiring']: for wiring_view in workspace_info['wiring']['views']: iwidgets_views = {} for key, widget in wiring_view['iwidgets'].iteritems(): iwidgets_views[iwidget_id_mapping[key].id] = widget operators_views = {} for key, operator in wiring_view['operators'].iteritems(): operators_views[operators[key]] = operator wiring_status['views'].append({ 'iwidgets': iwidgets_views, 'operators': operators_views, 'label': wiring_view['label'], 'multiconnectors': {}, 'connections': [] }) workspace.wiringStatus = json.dumps(wiring_status) workspace.save()