indexing description: "Objects that represent a conference" author: "Marco Piccioni" date: "$Date$" revision: "$0.3.1$" class CONFERENCE inherit APPLICATION_CONSTANTS redefine is_equal end create make feature -- Access name: STRING starting_date:DATE ending_date: DATE city: STRING country: STRING papers_submission_deadline: DATE main_sponsor: STRING url: STRING contact_name: STRING contact_email: STRING contact_role: STRING keywords: ARRAYED_LIST[STRING] additional_sponsors: ARRAYED_LIST[STRING] short_description: STRING conference_chair_1: STRING conference_chair_2: STRING program_committee_chair_1: STRING program_committee_chair_2: STRING organizing_chair: STRING status_of_approval: INTEGER -- See the State Pattern (GoF) for a more flexible and complex solution, in this case not needed in my opinion proceedings_at_conference: BOOLEAN proceedings_publisher: STRING additional_deadline_1:DATE additional_deadline_2:DATE additional_deadline_3:DATE additional_deadline_specification_1:STRING additional_deadline_specification_2:STRING additional_deadline_specification_3:STRING additional_notes:STRING id: NATURAL_64 --conference unique id feature -- default creation make local index:INTEGER do name:="" create starting_date.make_now create ending_date.make_now city:="" country:="" create papers_submission_deadline.make_now main_sponsor:="" url:="" contact_name:="" contact_email:="" contact_role:="" create keywords.make (5) from index:=1 until index>5 loop keywords.extend ("") index:=index+1 end create additional_sponsors.make (5) from index:=1 until index>5 loop additional_sponsors.extend ("") index:=index+1 end short_description:="" conference_chair_1:="" conference_chair_2:="" program_committee_chair_1:="" program_committee_chair_2:="" organizing_chair:="" status_of_approval:= Undefined proceedings_publisher:="" create additional_deadline_1.make_now create additional_deadline_2.make_now create additional_deadline_3.make_now additional_deadline_specification_1:="" additional_deadline_specification_2:="" additional_deadline_specification_3:="" additional_notes:="" end ----------------------------------------------------------------------------------------- feature --Redefinitions is_equal (other: like Current): BOOLEAN -- two conferences are considered equal is they have the same id do Result := Current.id = other.id end ----------------------------------------------------------------------------------------- feature -- Status setting set_name (a_name: STRING) --sets conference name require name_has_meaning: a_name/=Void AND THEN (NOT a_name.is_empty) do name:=a_name ensure name_is_set: name=a_name end --------------------------------------------------------------------------------------- set_starting_date (a_starting_date:DATE) --sets conference starting date require starting_date_has_meaning: a_starting_date/=Void do starting_date:=a_starting_date ensure starting_date_is_set: starting_date=a_starting_date end --------------------------------------------------------------------------------------- set_ending_date (an_ending_date:DATE) --sets conference ending date require ending_date_has_meaning: an_ending_date/=Void do ending_date:=an_ending_date ensure ending_date_is_set: ending_date=an_ending_date end --------------------------------------------------------------------------------------- set_city (a_city: STRING) --sets conference city require city_has_meaning: a_city/=Void AND THEN (NOT a_city.is_empty) do city:=a_city ensure city_is_set: city=a_city end --------------------------------------------------------------------------------------- set_country (a_country: STRING) --sets conference country require country_has_meaning: a_country/=Void AND THEN (NOT a_country.is_empty) do country:=a_country ensure country_is_set: country=a_country end --------------------------------------------------------------------------------------- set_papers_submission_deadline (a_papers_submission_deadline:DATE) --sets papers submission deadline require papers_submission_deadline_has_meaning: a_papers_submission_deadline/=Void do papers_submission_deadline:=a_papers_submission_deadline ensure papers_submission_deadline_is_set: papers_submission_deadline=a_papers_submission_deadline end --------------------------------------------------------------------------------------- set_main_sponsor (the_main_sponsor: STRING) --sets conference main sponsor require main_sponsor_has_meaning: the_main_sponsor/=Void AND THEN (NOT the_main_sponsor.is_empty) do main_sponsor:=the_main_sponsor ensure main_sponsor_is_set: main_sponsor=the_main_sponsor end --------------------------------------------------------------------------------------- set_url (an_url:STRING) --sets conference url require url_has_meaning: an_url/=Void AND THEN (NOT an_url.is_empty) do url:=an_url ensure url_is_set: url=an_url end --------------------------------------------------------------------------------------- set_contact_name (a_contact_name: STRING) --sets conference contact_name require contact_name_has_meaning: a_contact_name/=Void AND THEN (NOT a_contact_name.is_empty) do contact_name:=a_contact_name ensure contact_name_is_set: contact_name=a_contact_name end --------------------------------------------------------------------------------------- set_contact_email (an_email: STRING) --sets conference contact email require contact_email_has_meaning: an_email/=Void AND THEN (NOT an_email.is_empty) do contact_email:=an_email ensure contact_email_is_set: contact_email=an_email end --------------------------------------------------------------------------------------- set_contact_role (a_contact_role: STRING) --sets conference contact_role require contact_role_has_meaning: a_contact_role/=Void AND THEN (NOT a_contact_role.is_empty) do contact_role:=a_contact_role ensure contact_role_is_set: contact_role=a_contact_role end --------------------------------------------------------------------------------------- set_keywords (some_keywords:ARRAYED_LIST[STRING]) --sets conference keywords require some_keywords_have_meaning: some_keywords/=Void AND THEN (NOT some_keywords.is_empty) do keywords:=some_keywords ensure keywords_are_set: keywords=some_keywords end --------------------------------------------------------------------------------------- set_additional_sponsors (some_other_sponsors:ARRAYED_LIST[STRING]) --sets conference additional_sponsors require some_other_sponsors_have_meaning: some_other_sponsors/=Void AND THEN (NOT some_other_sponsors.is_empty) do additional_sponsors:=some_other_sponsors ensure additional_sponsors_are_set: additional_sponsors=some_other_sponsors end --------------------------------------------------------------------------------------- set_short_description (a_description: STRING) --sets conference short description require description_has_meaning: a_description/=Void AND THEN (NOT a_description.is_empty) do short_description:=a_description ensure country_is_set: short_description=a_description end --------------------------------------------------------------------------------------- set_conference_chair_1 (a_conference_chair: STRING) --sets conference_chair_1 require conference_chair_1_has_meaning: a_conference_chair/=Void AND THEN (NOT a_conference_chair.is_empty) do conference_chair_1:=a_conference_chair ensure conference_chair_1_is_set: conference_chair_1=a_conference_chair end --------------------------------------------------------------------------------------- set_conference_chair_2 (a_conference_chair: STRING) --sets conference_chair_2 require conference_chair_2_has_meaning: a_conference_chair/=Void AND THEN (NOT a_conference_chair.is_empty) do conference_chair_2:=a_conference_chair ensure conference_chair_2_is_set: conference_chair_2=a_conference_chair end --------------------------------------------------------------------------------------- set_program_committee_chair_1 (a_program_committee_chair: STRING) --sets program_committee_chair_1 require program_committee_chair_1_has_meaning: a_program_committee_chair/=Void AND THEN (NOT a_program_committee_chair.is_empty) do program_committee_chair_1:=a_program_committee_chair ensure program_committee_chair_1_is_set: program_committee_chair_1=a_program_committee_chair end --------------------------------------------------------------------------------------- set_program_committee_chair_2 (a_program_committee_chair: STRING) --sets program_committee_chair_2 require program_committee_chair_2_has_meaning: a_program_committee_chair/=Void AND THEN (NOT a_program_committee_chair.is_empty) do program_committee_chair_2:=a_program_committee_chair ensure program_committee_chair_2_is_set: program_committee_chair_2=a_program_committee_chair end --------------------------------------------------------------------------------------- set_organizing_chair (an_organizing_chair: STRING) --sets organizing_chair require organizing_chair_has_meaning: an_organizing_chair/=Void AND THEN (NOT an_organizing_chair.is_empty) do organizing_chair:=an_organizing_chair ensure organizing_chair_is_set: organizing_chair=an_organizing_chair end --------------------------------------------------------------------------------------- set_additional_deadline_1 (an_additional_deadline:DATE) --sets conference first additional deadline require additional_deadline_has_meaning: an_additional_deadline/=Void do additional_deadline_1:=an_additional_deadline ensure additional_deadline_1_is_set: additional_deadline_1=an_additional_deadline end --------------------------------------------------------------------------------------- set_additional_deadline_2 (an_additional_deadline:DATE) --sets conference second additional deadline require additional_deadline_has_meaning: an_additional_deadline/=Void do additional_deadline_2:=an_additional_deadline ensure additional_deadline_2_is_set: additional_deadline_2=an_additional_deadline end --------------------------------------------------------------------------------------- set_additional_deadline_3 (an_additional_deadline:DATE) --sets conference third additional deadline require additional_deadline_has_meaning: an_additional_deadline/=Void do additional_deadline_3:=an_additional_deadline ensure additional_deadline_3_is_set: additional_deadline_3=an_additional_deadline end ----------------------------------------------------------------------------------------- set_additional_deadline_specification_1 (an_additional_deadline_specification: STRING) --sets first additional_deadline_specification require additional_deadline_specification_has_meaning: an_additional_deadline_specification/=Void AND THEN (NOT an_additional_deadline_specification.is_empty) do additional_deadline_specification_1:=an_additional_deadline_specification ensure additional_deadline_specification_1_is_set: additional_deadline_specification_1=an_additional_deadline_specification end --------------------------------------------------------------------------------------- set_additional_deadline_specification_2 (an_additional_deadline_specification: STRING) --sets second additional_deadline_specification require additional_deadline_specification_has_meaning: an_additional_deadline_specification/=Void AND THEN (NOT an_additional_deadline_specification.is_empty) do additional_deadline_specification_2:=an_additional_deadline_specification ensure additional_deadline_specification_2_is_set: additional_deadline_specification_2=an_additional_deadline_specification end --------------------------------------------------------------------------------------- set_additional_deadline_specification_3 (an_additional_deadline_specification: STRING) --sets third additional_deadline_specification require additional_deadline_specification_has_meaning: an_additional_deadline_specification/=Void AND THEN (NOT an_additional_deadline_specification.is_empty) do additional_deadline_specification_3:=an_additional_deadline_specification ensure additional_deadline_specification_3_is_set: additional_deadline_specification_3=an_additional_deadline_specification end --------------------------------------------------------------------------------------- set_additional_notes (some_additional_notes: STRING) --sets third additional_deadline_specification require some_additional_notes_have_meaning: some_additional_notes/=Void AND THEN (NOT some_additional_notes.is_empty) do additional_notes:=some_additional_notes ensure additional_notes_are_set: additional_notes=some_additional_notes end --------------------------------------------------------------------------------------- set_state_of_approval (a_status_of_approval: INTEGER) --sets conference status of approval require a_status_of_approval_has_meaning: a_status_of_approval=Accepted OR a_status_of_approval=Proposed OR a_status_of_approval=Rejected OR a_status_of_approval=Delayed OR a_status_of_approval=Undefined do status_of_approval:=a_status_of_approval ensure status_of_approval_is_set: status_of_approval=a_status_of_approval end --------------------------------------------------------------------------------------- set_proceedings_at_conference (are_proceedings_at_conference: BOOLEAN) --sets conference proceedings to be at conference (True) or post conference (False) do proceedings_at_conference:=are_proceedings_at_conference ensure proceedings_are_set: proceedings_at_conference=are_proceedings_at_conference end --------------------------------------------------------------------------------------- set_proceedings_publisher (a_proceedings_publisher: STRING) --sets proceedings_publisher name require proceedings_publisher_has_meaning: a_proceedings_publisher/=Void AND THEN (NOT a_proceedings_publisher.is_empty) do proceedings_publisher:=a_proceedings_publisher ensure proceedings_publisher_is_set: proceedings_publisher=a_proceedings_publisher end ---------------------------------------------------------------------------------------- set_id (an_id: NATURAL_64) --sets conference id require an_id_has_meaning: an_id>0 do id:=an_id ensure id_is_set: id=an_id end ---------------------------------------------------------------------------------------- feature -- view functions, useful for returning a particular view of the conference user_arrayed_conference_data: ARRAY[STRING] --returns this conference data as an array of strings: useful for presenting conference data as a line of an html table require current_conference_is_accepted: status_of_approval = Accepted local string_array:ARRAY[STRING] temp_date:DATE do create string_array.make (1,Conference_list_number_of_columns) string_array[1]:=""+name+"") string_array[2]:=starting_date.formatted_out ("[0]dd/[0]mm/yyyy") + "-" +ending_date.formatted_out ("[0]dd/[0]mm/yyyy") --we need the following checks because otherwise the corresponding HTML table cell doesn't display nicely (the cell border is not displayed) if city /= Void then city.left_adjust city.right_adjust if (NOT city.is_empty) then string_array[3]:=city else string_array[3]:=" " end end if country /= Void then country.left_adjust country.right_adjust if (NOT country.is_empty) then string_array[4]:=country else string_array[4]:=" " end end create temp_date.make_day_month_year (1, 1, 1111) if temp_date.is_equal(papers_submission_deadline) then string_array[5]:="n/a" else string_array[5]:=papers_submission_deadline.formatted_out ("[0]dd/[0]mm/yyyy") end if main_sponsor /= Void then main_sponsor.left_adjust main_sponsor.right_adjust if (NOT main_sponsor.is_empty) then string_array[6]:=main_sponsor else string_array[6]:=" " end end if proceedings_publisher /= Void then proceedings_publisher.left_adjust proceedings_publisher.right_adjust if (NOT proceedings_publisher.is_empty) then string_array[7]:=proceedings_publisher else string_array[7]:=" " end end Result:=string_array ensure Result /=Void AND THEN (NOT Result.is_empty) end ----------------------------------------------------------------------------------------------------------------- admin_arrayed_conference_data: ARRAY[STRING] --returns this conference data as an array of strings: useful for presenting conference data as a line of an html table local string_array:ARRAY[STRING] temp_date:DATE do create string_array.make (1,Conference_list_number_of_columns) if status_of_approval = Accepted then string_array[1]:=""+name+"") string_array[2]:=starting_date.formatted_out ("[0]dd/[0]mm/yyyy") + "-" +ending_date.formatted_out ("[0]dd/[0]mm/yyyy") --we need the following checks because otherwise the corresponding HTML table cell doesn't display nicely (the cell border is not displayed) if city /= Void then city.left_adjust city.right_adjust if (NOT city.is_empty) then string_array[3]:=city else string_array[3]:=" " end end if country /= Void then country.left_adjust country.right_adjust if (NOT country.is_empty) then string_array[4]:=country else string_array[4]:=" " end end create temp_date.make_day_month_year (1, 1, 1111) if temp_date.is_equal(papers_submission_deadline) then string_array[5]:="n/a" else string_array[5]:=papers_submission_deadline.formatted_out ("[0]dd/[0]mm/yyyy") end if main_sponsor /= Void then main_sponsor.left_adjust main_sponsor.right_adjust if (NOT main_sponsor.is_empty) then string_array[6]:=main_sponsor else string_array[6]:=" " end end if proceedings_publisher /= Void then proceedings_publisher.left_adjust proceedings_publisher.right_adjust if (NOT proceedings_publisher.is_empty) then string_array[7]:=proceedings_publisher else string_array[7]:=" " end end Result:=string_array ensure Result /=Void AND THEN (NOT Result.is_empty) end ----------------------------------------------------------------------------------------------------------------- user_arrayed_conference_metadata: ARRAY[STRING] --returns this conference metadata as an array of strings: useful for setting up the header of an html table require status_consistent: status_of_approval = Accepted OR status_of_approval = Undefined local string_array:ARRAY[STRING] do create string_array.make (1,Conference_list_number_of_columns) string_array[1]:="Conference name"+"%"%"" string_array[2]:="Date"+"%"%"" string_array[3]:="City" string_array[4]:="Country"+"%"%"" string_array[5]:="Paper deadline"+"%"%"" string_array[6]:="Main sponsor" string_array[Conference_list_number_of_columns]:="Publisher" Result:=string_array ensure Result /=Void AND THEN (NOT Result.is_empty) end admin_arrayed_conference_metadata: ARRAY[STRING] --returns this conference metadata as an array of strings: useful for setting up the header of an html table local string_array:ARRAY[STRING] do create string_array.make (1,Conference_list_number_of_columns) --different hyperlinks will trigger different conference lists if status_of_approval = Accepted OR status_of_approval = Undefined then string_array[1]:="Conference name"+"" string_array[2]:="Date"+"" string_array[3]:="City" string_array[4]:="Country"+"" string_array[5]:="Paper deadline"+"" elseif status_of_approval = Proposed OR status_of_approval = Delayed then string_array[1]:="Conference name"+"" string_array[2]:="Date"+"" string_array[3]:="City" string_array[4]:="Country"+"" string_array[5]:="Paper deadline"+"" else check state_of_conference_not_consistent:False end end string_array[6]:="Main sponsor" string_array[Conference_list_number_of_columns]:="Publisher" Result:=string_array ensure Result /=Void AND THEN (NOT Result.is_empty) end invariant conference_id_non_negative: id >= 0 end